您的位置:首页 > 编程语言 > C语言/C++

带有const修饰的指针解读

2017-09-20 14:03 246 查看
 通过实例来看看const所修饰的指针使用方法:

 1、

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

  形式:int *pTmp

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

[cpp] view
plaincopyprint?

int main(int argc, char *argv[])  

{  

  int i = 1;  

    

  int  *pTmp = &i;   

  printf("pTmp = %d\n", *pTmp);  

    

  i = 2;  

  printf("pTmp = %d\n", *pTmp);  

    

  (*pTmp)++;   

  printf("pTmp = %d\n", *pTmp);  

    

  system("PAUSE");  

    

  return 0;  

}  

  输出:

[plain] view
plaincopyprint?

pTmp = 1  

pTmp = 2  

pTmp = 3  

请按任意键继续. . .  

 没有任何问题,pTmp指针你可以任意操作。

2、

形式:const int *pTmp

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

[cpp] view
plaincopyprint?

int main(int argc, char *argv[])  

{  

  int i = 1;  

  int j = 100;  

    

  const int  *pTmp = &i; /*正确:表示pTmp所指向的对象是只读的,但pTmp可指向其他地址,即pTmp可变*/   

  printf("pTmp = %d\n", *pTmp);  

    

  i = 2;  

  printf("pTmp = %d\n", *pTmp);  

    

  pTmp = &j;            /*正确:将pTmp指向变量j的地址*/  

  printf("pTmp = %d\n", *pTmp);  

    

    

  (*pTmp)++; /*错误,pTmp指向的对象是只读的,编译出错提示:assignment of read-only location */  

  printf("pTmp = %d\n", *pTmp);  

    

  system("PAUSE");  

    

  return 0;  

}  

3、

形式:int const *pTmp

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

[cpp] view
plaincopyprint?

int main(int argc, char *argv[])  

{  

  int i = 1;  

  int j = 100;  

    

  const int  *pTmp = &i; /*正确:表示pTmp所指向的对象是只读的,但pTmp可指向其他地址,即pTmp可变*/   

  printf("pTmp = %d\n", *pTmp);  

    

  i = 2;  

  printf("pTmp = %d\n", *pTmp);  

    

  pTmp = &j;            /*正确:将pTmp指向变量j的地址*/  

  printf("pTmp = %d\n", *pTmp);  

    

    

  (*pTmp)++; /*错误,pTmp指向的对象是只读的,编译出错提示:assignment of read-only location */  

  printf("pTmp = %d\n", *pTmp);  

    

  system("PAUSE");    

    

  return 0;  

}  

4、

形式:int * const pTmp

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

[cpp] view
plaincopyprint?

int main(int argc, char *argv[])  

{  

  int i = 1;  

  int j = 100;  

    

  int * const pTmp = &i;   

  printf("pTmp = %d\n", *pTmp);  

    

  i = 2;  

  printf("pTmp = %d\n", *pTmp);  

    

  pTmp = &j;  /*错误,pTmp不可修改,编译提示:error:assignment of read-only variable `pTmp'*/  

  printf("pTmp = %d\n", *pTmp);  

    

    

  (*pTmp)++; /*正确,pTmp所指向的对象可以修改 */  

  printf("pTmp = %d\n", *pTmp);  

    

  system("PAUSE");    

    

  return 0;  

}  

5、

 形式:const int * const pTmp

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

[cpp] view
plaincopyprint?

int main(int argc, char *argv[])  

{  

  int i = 1;  

  int j = 100;  

    

  const int * const pTmp = &i;   

  printf("pTmp = %d\n", *pTmp);  

    

  i = 2;  /*正确*/  

  printf("pTmp = %d\n", *pTmp);  

    

  pTmp = &j;  /*错误:error: assignment of read-only variable `pTmp'*/  

  printf("pTmp = %d\n", *pTmp);  

    

    

  (*pTmp)++;  /*错误:error: increment of read-only location*/  

  printf("pTmp = %d\n", *pTmp);  

    

  system("PAUSE");  

    

  return 0;  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 Const