程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 指針與const限定符 const int * p 與 int * const p 的 區別

指針與const限定符 const int * p 與 int * const p 的 區別

編輯:C++入門知識

先看 const int a = 2;    a的值是只讀。


const int * p 與 int * const p 的 區別 ,。

可以這樣理解:以*為分界點把變量分成兩部分, 看const修飾誰。

const int * p:const 修飾的是int 所以 把const int 看成是一種類型,很顯然 這種類型的內存是只讀的。p指針本身不是只讀

int * const p:const 修飾的是p,和上面的a一樣是只讀的,指向的內存並不是只讀的,是讀寫的。

另外const int * p  和int const * p 寫法是一樣的。

例子:

 

[cpp] #include <stdio.h>  
 
static const int num = 5; 
static int a[5] = {0,1,2,3,4}; 
 
extern void print_all_address_value(const int p[], const int p1[] );//這種參數的好處是,數據在訪問過程中不會被更改。。  
extern int  get_value(const int * const a);//這種參數的好處是,數據在訪問過程中不會被更改,還有保證了獲取到所需的數據,而不是意外的數據。  
extern int  set_value(int * const a, const int value);//這種參數的好處是,保證更改的數據,的確是我們需要更改的。  
<PRE class=cpp name="code">  
void main(){ 
    int *p, *p1 ; 
    p = a; 
    p1 = &a[0]; 
    print_all_address_value(p,p1); 
    set_value(p+1,9); 
    get_value(p1+1);     
    printf("value p1 = %d\n",get_value(p+1)); 

 
extern void print_all_address_value(const int p[], const int p1[] ){ 
    int i = 0; 
    for(i=0;i<num;i++){ 
        printf("for address a = %p, p = %p, p1 = %p\n", &a[i],p,p1); 
        printf("for value   a = %d,        p = %d,        p1 = %d\n", a[i],*p,*p1); 
        p++; 
        p1++; 
    } 

 
extern int  get_value(const int * const a){ 
    return *a; 

extern int set_value(int * const a, const int value){ 
    *a = value; 
    return *a; 

</PRE> 
<P></P> 
<PRE></PRE> 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved