指向const的指针和const指针的区别

打印 上一主题 下一主题

主题 1724|帖子 1724|积分 5172

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. 指向常量的指针(指向const的指针)
指向const的指针,不能改变其所指变量(对象)的值,或者说不能通过这个指向const的指针去改变所指的变量(对象)的值
  1. // 指向const的指针,不能通过*cptr修改指向的变量(对象)的值
  2. const double pi = 3.14;
  3. const double *cptr = π
  4. // 错误,不能通过解引用指针来修改所指变量(对象)的值
  5. *cptr = 42
复制代码
 
 
2. 常量指针(const指针)
const指针,在初始化后,不能改变这个const指针中存放的地址,或者说这个const指针在初始化时,指向了一个变量(对象)后,就不能再改变这个const指针的指向了
  1. // const指针
  2. int errNumb = 0;
  3. int newVal = 77;
  4. int *const curErr = &errNumb;
  5. // 错误,不能修改指针的指向
  6. curErr = &newVal;
复制代码
 
 
3. 指向常量的常量指针(指向const变量的const指针)
此标题所指的const变量==常量==常量对象
指向const变量的const指针,不论是其所指的变量(对象)的值照旧自身存放的地址都不能改变,或者说不能通过这个指针去改变所指的变量(对象)的值,在指针初始化后也不能改变这个指针的指向
  1. const double pi = 3.14;
  2. const double newVal = 77.88;
  3. const double *const pip = π
  4. // 错误,不能修改指针的指向
  5. pip = &newVal;
  6. // 错误,不能通过解引用指针来修改所指变量(对象)的值
  7. *pip = 7.62;
复制代码
 
 
4. 识别常量指针----不可修改指针的指向
  1. int errNumb = 0;
  2. int newNumb = 7;
  3. int *const curErr = &errNumb;
  4. const double pi = 3.14;
  5. const double pp = 8.88;
  6. // 指向常量的常量指针
  7. const double *const pip = π
  8. // 正确,可修改指向的对象的值
  9. *curErr = 8;
  10. // 错误,不可修改指针的指向,即初始化后不可重新指向一个其他的对象
  11. curErr = &newNumb;
  12. // ----------------------------------------------------------
  13. // 错误,不可修改指向的对象的值
  14. *pip = 7.62;
  15. // 错误,不可修改指针的指向,即初始化后不可指向一个其他的对象
  16. pip = &pp;
复制代码
上述代码中,从右往左阅读界说:
离curErr最近的符号是const,意味着curErr本身是一个常量对象,再往左读是一个*,意味着curErr此时是一个常量指针
由此可知,pip也是一个常量指针 ,也就是说,只要符合按*const 标识符这样一种顺序组合的指针,就是一个不可修改指针指向的常量指针
 
 
5. 识别指向常量的指针----可修改指针的指向
  1. const double pi = 3.14;
  2. const double pp = 7.62;
  3. const double *cptr = π
  4. // 错误,不可修改指向的对象的值
  5. *cptr = 42;
  6. // 正确,可修改指针的指向
  7. cptr = &pp;
复制代码
上述代码中,从右往左阅读界说:
离cptr最近的符号是*,往左是一个数据类型,此为double,再往左是const,意味着cptr此时是一个指向常量的指针
因为cptr是一个指针,它指向一个常量pi,所以称cptr是一个指向常量的指针
也就是说,只要符合const 数据类型 *标识符这样一种顺序组合的指针,就是一个不可修改指向对象的值的指向常量的指针
值得一提的是,指向常量的指针可以修改其指向
 
 
6. 总结
指向常量的指针:不能用于改变所指变量(对象)的值,但能修改指针的指向
常量指针:不能改变指针的指向,即不能改变指针自身存储的地址值
指向常量的常量指针:既不能改变指针所指的变量(对象)的值,也不能改变指针的指向
 
Tips:
实际上,指针本身是一个常量并不意味着不能通过指针修改其所指对象的值,能否这样做完全依赖于所指对象的类型
如,pip是一个指向常量的常量指针,则不论是pip所指的对象值照旧pip本身存储的那个地址都不能改变
相反,curErr指向的是一个一般的非常量整数errNumb,因为errNumb不是一个常量,那么就完全可以用curErr去修改errNumb的值
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

冬雨财经

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表