带有const修饰的指针解读

 通过实例来看看const所修饰的指针使用方法:

 1、

  先看一个普通的指针使用。

  形式:int *pTmp

  含义:一个普通的指向int类型的指针

  1. int main(int argc, char *argv[])  
  2. {  
  3.   int i = 1;  
  4.     
  5.   int  *pTmp = &i;   
  6.   printf("pTmp = %d\n", *pTmp);  
  7.     
  8.   i = 2;  
  9.   printf("pTmp = %d\n", *pTmp);  
  10.     
  11.   (*pTmp)++;   
  12.   printf("pTmp = %d\n", *pTmp);  
  13.     
  14.   system("PAUSE");  
  15.     
  16.   return 0;  
  17. }  

  输出:

[plain]  view plain copy print ?
  1. pTmp = 1  
  2. pTmp = 2  
  3. pTmp = 3  
  4. 请按任意键继续. . .  
 没有任何问题,pTmp指针你可以任意操作。

2、

形式:const int *pTmp

含义:表示pTmp所指向的对象是只读的,但pTmp可指向其他地址,即pTmp可变。

  1. int main(int argc, char *argv[])  
  2. {  
  3.   int i = 1;  
  4.   int j = 100;  
  5.     
  6.   const int  *pTmp = &i; /*正确:表示pTmp所指向的对象是只读的,但pTmp可指向其他地址,即pTmp可变*/   
  7.   printf("pTmp = %d\n", *pTmp);  
  8.     
  9.   i = 2;  
  10.   printf("pTmp = %d\n", *pTmp);  
  11.     
  12.   pTmp = &j;            /*正确:将pTmp指向变量j的地址*/  
  13.   printf("pTmp = %d\n", *pTmp);  
  14.     
  15.     
  16.   (*pTmp)++; /*错误,pTmp指向的对象是只读的,编译出错提示:assignment of read-only location */  
  17.   printf("pTmp = %d\n", *pTmp);  
  18.     
  19.   system("PAUSE");  
  20.     
  21.   return 0;  
  22. }  

3、

形式:int const *pTmp

含义:与2相同, 表示pTmp所指向的对象是只读的,但pTmp可指向其他地址,即pTmp可变。

  1. int main(int argc, char *argv[])  
  2. {  
  3.   int i = 1;  
  4.   int j = 100;  
  5.     
  6.   const int  *pTmp = &i; /*正确:表示pTmp所指向的对象是只读的,但pTmp可指向其他地址,即pTmp可变*/   
  7.   printf("pTmp = %d\n", *pTmp);  
  8.     
  9.   i = 2;  
  10.   printf("pTmp = %d\n", *pTmp);  
  11.     
  12.   pTmp = &j;            /*正确:将pTmp指向变量j的地址*/  
  13.   printf("pTmp = %d\n", *pTmp);  
  14.     
  15.     
  16.   (*pTmp)++; /*错误,pTmp指向的对象是只读的,编译出错提示:assignment of read-only location */  
  17.   printf("pTmp = %d\n", *pTmp);  
  18.     
  19.   system("PAUSE");    
  20.     
  21.   return 0;  
  22. }  

4、

形式:int * const pTmp

含义:pTmp不可修改,但pTmp所指向的对象可以修改。

  1. int main(int argc, char *argv[])  
  2. {  
  3.   int i = 1;  
  4.   int j = 100;  
  5.     
  6.   int * const pTmp = &i;   
  7.   printf("pTmp = %d\n", *pTmp);  
  8.     
  9.   i = 2;  
  10.   printf("pTmp = %d\n", *pTmp);  
  11.     
  12.   pTmp = &j;  /*错误,pTmp不可修改,编译提示:error:assignment of read-only variable `pTmp'*/  
  13.   printf("pTmp = %d\n", *pTmp);  
  14.     
  15.     
  16.   (*pTmp)++; /*正确,pTmp所指向的对象可以修改 */  
  17.   printf("pTmp = %d\n", *pTmp);  
  18.     
  19.   system("PAUSE");    
  20.     
  21.   return 0;  
  22. }  

5、

 形式:const int * const pTmp

 含义:pTmp不可修改,pTmp所指对象也不能修改。

  1. int main(int argc, char *argv[])  
  2. {  
  3.   int i = 1;  
  4.   int j = 100;  
  5.     
  6.   const int * const pTmp = &i;   
  7.   printf("pTmp = %d\n", *pTmp);  
  8.     
  9.   i = 2;  /*正确*/  
  10.   printf("pTmp = %d\n", *pTmp);  
  11.     
  12.   pTmp = &j;  /*错误:error: assignment of read-only variable `pTmp'*/  
  13.   printf("pTmp = %d\n", *pTmp);  
  14.     
  15.     
  16.   (*pTmp)++;  /*错误:error: increment of read-only location*/  
  17.   printf("pTmp = %d\n", *pTmp);  
  18.     
  19.   system("PAUSE");  
  20.     
  21.   return 0;  
  22. }  

猜你喜欢

转载自blog.csdn.net/u010671230/article/details/78040123