先看 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>