主题:学用const 修饰符
1.指向const的指针
Const int * u;等价于 int const * u;//可以不付初值
const int* ptr; /*ptr是一个指针,它他指向一个const int */
int const* ptr1; /* ptr1是一个指向int 的 const的指针*/
int object = 2;
const ConstObject = 3;
//ptr example
ptr = &object;// *ptr= 2
// *ptr=*ptr+3;//*ptr is const. error:1-value specifies const object
object=object+2;
*ptr;//*ptr = 4不能用ptr改变所指向对象的值,但对象值可以变
//*ptr+=1;//ptr is const. error:1-value specifies const object
ptr+=1;// 相当于指针下移,与object无关,这样用很危险
ptr = &ConstObject;
//*ptr =*ptr +3;//*ptr is const. error:1-value specifies const object
//ConstObject=ConstObject+2;/*error C2166: l-value specifies const object*/
ptr+=1;//相当于指针下移,与object无关,这样用很危险
//结论:指针不能间接访问
2. const指针
定义:int * const ptr;
读作:w是一个指针,这个指针指向int的const指针
用法:必须给一个初始值,可以改变他所指向的值
int d=1;
int *const ptr=&d;
*ptr;// *ptr=1;
d=5;
*ptr;//*ptr=5
//ptr+=1;/*error C2166: l-value specifies const object*/
*ptr =10;
d;//d=10
//结论:指针不能直接访问
3. 对象和指针都不能变
int v=4;
const int* const ptr = &v;
int const *const ptr = &v;
//*ptr += 3;//Error
//ptr += 1;//Error
4.普通指针理解:
int d=1;
int* ptr;
int **ptr2;//指针的指针用于存储指针类型
ptr = &d;//ptr = 0x0012fb38
ptr2 = &ptr;//ptr2 = 0x0012fb34
*ptr;//1
*ptr2;//0x0012fb38
**ptr2;//1
d=6;//对象改变
ptr ;//ptr = 0x0012fb38
ptr2 ;//ptr2 = 0x0012fb34
*ptr;//6
*ptr2;//0x0012fb38
**ptr2;//6
*ptr += 1;//间接改变指向对象
ptr ;//ptr = 0x0012fb38
ptr2 ;//ptr2 = 0x0012fb34
*ptr;//7
*ptr2;//0x0012fb38
**ptr2;//7
ptr+=1;//指针改变
ptr ;//ptr = 0x0012fb3c
ptr2 ;//ptr2 = 0x0012fb34
*ptr;//随机,这样用很危险
*ptr2;//0x0012fb3c
**ptr2;//随机,这样用很危险
Const int * u;等价于 int const * u;//可以不付初值
const int* ptr; /*ptr是一个指针,它他指向一个const int */
int const* ptr1; /* ptr1是一个指向int 的 const的指针*/
int object = 2;
const ConstObject = 3;
//ptr example
ptr = &object;// *ptr= 2
// *ptr=*ptr+3;//*ptr is const. error:1-value specifies const object
object=object+2;
*ptr;//*ptr = 4不能用ptr改变所指向对象的值,但对象值可以变
//*ptr+=1;//ptr is const. error:1-value specifies const object
ptr+=1;// 相当于指针下移,与object无关,这样用很危险
ptr = &ConstObject;
//*ptr =*ptr +3;//*ptr is const. error:1-value specifies const object
//ConstObject=ConstObject+2;/*error C2166: l-value specifies const object*/
ptr+=1;//相当于指针下移,与object无关,这样用很危险
//结论:指针不能间接访问
2. const指针
定义:int * const ptr;
读作:w是一个指针,这个指针指向int的const指针
用法:必须给一个初始值,可以改变他所指向的值
int d=1;
int *const ptr=&d;
*ptr;// *ptr=1;
d=5;
*ptr;//*ptr=5
//ptr+=1;/*error C2166: l-value specifies const object*/
*ptr =10;
d;//d=10
//结论:指针不能直接访问
3. 对象和指针都不能变
int v=4;
const int* const ptr = &v;
int const *const ptr = &v;
//*ptr += 3;//Error
//ptr += 1;//Error
4.普通指针理解:
int d=1;
int* ptr;
int **ptr2;//指针的指针用于存储指针类型
ptr = &d;//ptr = 0x0012fb38
ptr2 = &ptr;//ptr2 = 0x0012fb34
*ptr;//1
*ptr2;//0x0012fb38
**ptr2;//1
d=6;//对象改变
ptr ;//ptr = 0x0012fb38
ptr2 ;//ptr2 = 0x0012fb34
*ptr;//6
*ptr2;//0x0012fb38
**ptr2;//6
*ptr += 1;//间接改变指向对象
ptr ;//ptr = 0x0012fb38
ptr2 ;//ptr2 = 0x0012fb34
*ptr;//7
*ptr2;//0x0012fb38
**ptr2;//7
ptr+=1;//指针改变
ptr ;//ptr = 0x0012fb3c
ptr2 ;//ptr2 = 0x0012fb34
*ptr;//随机,这样用很危险
*ptr2;//0x0012fb3c
**ptr2;//随机,这样用很危险