Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2628584
  • 博文数量: 333
  • 博客积分: 4817
  • 博客等级: 上校
  • 技术积分: 4413
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-28 10:51
文章分类

全部博文(333)

文章存档

2017年(20)

2016年(57)

2015年(27)

2014年(20)

2013年(21)

2012年(164)

2011年(24)

分类: C/C++

2016-06-30 10:51:37

本文只是一篇学习笔记,是看了《彻底搞定C指针》中的相关篇幅后的一点总结,仅此而已!

一、先搞清const int *p与int const *p的区别

它们的区别就是:没有区别!!

无论谁在前面都没有影响!所以const int *p与int const *p用法一样!


二、const int *p的用法

  1. #include   
  2. #include   
  3. #include   
  4.   
  5. int main(int argc, char **argv)  
  6. {  
  7.     int test1 = 1;  
  8.     int test2 = 2;  
  9.     const int *p;  
  10.       
  11.     p = &test1;  
  12.     p = &test2;  
  13.     test2 = 3;  
  14.     //*p = 4;     error: assignment of read-only location ‘*p’  
  15.     printf("%d\n", *p);  
  16.       
  17.     return 0;  
  18. }  

执行结果 :3 ,这个好理解,如果加入被我注释掉的那一行就会报错,编译通不过,我用的是gcc version 4.4.3。也就是说*p是常量,不可更改,但指针p还是变量,你想怎么 变都可以。


三、int *const p的用法

  1. #include   
  2. #include   
  3. #include   
  4.   
  5. int main(int argc, char **argv)  
  6. {  
  7.     int test1 = 1;  
  8.     int test2 = 2;  
  9.     int *const p = &test1;  //只能在声明的时候就给它赋初值,否则还是会报错的  
  10.   
  11.     //p = &test2;           error: assignment of read-only location ‘*p’  
  12.     test1 = 3;  
  13.     printf("%d\n", *p);  
  14.       
  15.     return 0;  
  16. }  
执行结果 :3 ,这样用p是常量,也就是说p所指向的地址是不可以更改的,所以当把test2的地址赋值给p时就会报错!但是p所指的地址内容是可以改变的。

三、补充const int *const p

  1. #include   
  2. #include   
  3. #include   
  4.   
  5. int main(int argc, char **argv)  
  6. {  
  7.     int test1 = 1;  
  8.     int test2 = 2;  
  9.     const int *const p = &test1;  
  10.   
  11.     //p = &test2;  
  12.     //*p = 3;  
  13.     printf("%d\n", *p);  
  14.       
  15.     return 0;  
  16. }  
执行结果 :1,这个就相当于以上两种情况的混合体,p是常量,所以不能把test2的地址赋给p;同时*p也是常量,所以*p的内容不可更改!
阅读(1500) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~