喜闻乐见的const int *p、int* const p、const int* const p
不废话直接代码示例:
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; // fine 16 17 p = &b; // error 18 19 } 20 21 void f(const int* const p) { 22 23 int b = 10; 24 25 *p = 10; // error 26 27 p = &b; // error 28 29 }
然而,如果function f使用了const作为承诺(不修改p或者不修改p指向的区域或者二者都有),function g与f有同样的interface但g没有使用const作任何承诺,如果f把p传递给了g,f是不会对g的行为做任何保证的(也就是说即便g对p或者p指向的区域做出了修改,编译器仍然不会报错,这是合理的,因为f只保证自己不会直接修改,但不保证自己调用的其他function不作修改)
下面是个示例:
1 #include <stdio.h> 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; // error 17 g(p); 18 } 19 20 void g(int *p) { 21 *p = 999; 22 }
转载于:https://www.cnblogs.com/qrlozte/p/4019209.html
喜闻乐见的const int *p、int* const p、const int* const p相关推荐
- 容器的访问元素的成员函数(front,back,下标和at)返回的都是引用,如果顺序容器是const的对象,那么返回的是const的引用
顺序容器的访问元素的成员函数(front,back,下标和at)返回的都是引用,如果顺序容器是const的对象,那么返回的是const的引用,下面有个例子说明问题: #include <iost ...
- const 常量_条款03:尽可能使用const
const 允许你指定一个语义约束(也就是指定一个"不该被改动"的对象),而编译器会强制实施这项约束. 1.const指针 如果关键字const出现在星号左边,表示被指物是常量:如 ...
- c语言中entern int x y,关于extern和int main()的结构有关问题
关于extern和int main()的结构问题 本帖最后由 hashcat 于 2015-09-20 12:34:50 编辑 这是c实现md5加密的代码,报错部分是两处extern,其实也就是两处e ...
- c语言中 static int,c语言中static unsigned int n=0;是什么意思?请大师指点迷津,学生有礼了。...
c语言中static unsigned int n=0;是什么意思?请大师指点迷津,学生有礼了.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我 ...
- C++实现int转char*和char*转int
#include <iostream> #include <string.h> using namespace std; /***将字符串转成int***/ int char2 ...
- mysql int(40)_MySQL Integer类型与INT(11)
1.介绍 Integer类型,即整数类型,MySQL支持的整数类型有TINYINT.SMALLINT.MEDIUMINT.INT.BIGINT. 1.1 空间和范围 每种整数类型所需的存储空间和范围如 ...
- int a[5]={}, a+1与(int*)a+1的区别
/*int a[5]={}, &a+1与(int*)a+1的区别 */ #include <stdio.h>int main() {int b, *pb;char *pb2;pb ...
- int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
这是一个来自linux内核4.20.1的代码段(af_inet.c): /** ioctl() calls you can issue on an INET socket. Most of these ...
- python int函数的实现_python实现int函数的案例分析
python实现int函数的案例分析 发布时间:2020-08-06 14:35:55 来源:亿速云 阅读:88 作者:小新 python实现int函数的案例分析?这个问题可能是我们日常学习或工作经常 ...
- int? 是什么类型?和int有何区别
int?:表示可空类型,就是一种特殊的值类型,它的值可以为null用于给变量设初值得时候,给变量(int类型)赋值为null,而不是0int??:用于判断并赋值,先判断当前变量是否为null,如果是就 ...
最新文章
- python hibernate_将Java/MVC/Hibernate webapp移植到Python
- python线下培训-济南Python线下培训班哪个好
- MySQL——统计某个表每天的总量和增量问题解决方案
- LVS(14)——DR模型实践、交换机
- C++ inline variable
- php ci model条件查询,Laravel关系模型指定条件查询方法
- Python字符串模糊匹配库FuzzyWuzzy
- [转]迭代、集合、字典表和列表
- Qt工作笔记-QLineEdit用正则限制文本框的输入内容+正则表达式语法
- IIS+PHP环境下出现HTTP 500服务器内部错误——请检查权限设置
- 端口占用问题解决办法(以1099端口为例)
- Django | 静态文件处理
- html用post怎么加密,post提交数据如何加密
- win10默认壁纸位置
- 我国留学低龄化趋势显著-家长失望国内应试教育-留学-低龄化-教育改革
- java练习题-猜数字游戏
- 12c 新特性-统一审计(Unified Auditing)
- 【Python】正则表达式判断是否存在连续N个字母
- 领英加人的方法和细节,一个月轻松加1000+人
- 0906期特别策划——“架构师大阅兵”
热门文章
- python 图表_Python入门学习系列——使用Python调用Web API实现图表统计
- java jlist 更新_java – 更新JList
- python redis连接池获取后关闭_python通过连接池连接redis,操作redis队列
- mysql和sqlserver共存_mysql 和sqlserver的 多行合并成一行
- python做定时任务的方式及优缺点_python BlockingScheduler定时任务及其他方式的实现...
- oracle定时器怎么开启,Oracle的定时器使用示例
- MSP430低功耗模式-while循环失效
- Monitor CodeForces - 846D ——二维前缀和
- 深度学习(6)构造简单的神经网络
- 获取系统时间精确到毫秒级C++代码实现