博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
喜闻乐见的const int *p、int* const p、const int* const p
阅读量:7123 次
发布时间:2019-06-28

本文共 823 字,大约阅读时间需要 2 分钟。

不废话直接代码示例:

1 void f(const int *p) { 2  3     int b = 10; 4  5     *p = 10; // error 6  7     p = &b; // fine 8  9 }10 11 void f(int* const p) {12 13     int b = 10;14 15     *p = 10; // fine16 17     p = &b; // error18 19 }20 21 void f(const int* const p) {22 23     int b = 10;24 25     *p = 10; // error26 27     p = &b; // error28 29 }

然而,如果function f使用了const作为承诺(不修改p或者不修改p指向的区域或者二者都有),function g与f有同样的interface但g没有使用const作任何承诺,如果f把p传递给了g,f是不会对g的行为做任何保证的(也就是说即便g对p或者p指向的区域做出了修改,编译器仍然不会报错,这是合理的,因为f只保证自己不会直接修改,不保证自己调用的其他function不作修改)

下面是个示例:

1 #include 
2 3 void f(); 4 void g(); 5 6 7 int main() { 8 int a = 0; 9 int *p = &a;10 f(p);11 printf("a=%d\n", a);12 return 0;13 }14 15 void f(const int *p) {16 //*p = 10; // error17 g(p);18 }19 20 void g(int *p) {21 *p = 999;22 }

 

转载地址:http://uxxel.baihongyu.com/

你可能感兴趣的文章
ZigBee组网
查看>>
maven 项目出现 java.lang.ClassNotFoundException: or...
查看>>
PaperFoldMenuController
查看>>
JCMSegmentedPageController
查看>>
JSTokenField
查看>>
[应用模板]简洁优雅网站
查看>>
VCL篇:DevExpress v16.1新功能介绍
查看>>
iOS 之 CFBridgingRelease
查看>>
变量的存储类型
查看>>
使用AVAudioPlayer出现的问题
查看>>
封装性
查看>>
如何在适合OpenCart系统运行的美国服务器空间建立SMTP服务
查看>>
JAVA中int、String的类型转换
查看>>
MongoDB Could not find host matching read preference { mode: \"primary\" } for set repl_shard1
查看>>
SOAP webserivce 和 RESTful webservice 对比及区别
查看>>
系统操作日志设计
查看>>
spring boot 资料
查看>>
iOS5系统API和5个开源库的JSON解析速度测试
查看>>
iOS入门实例文章目录
查看>>
android Activity.java 源码
查看>>