相传在c的世界里出现了一件极品装备(铁布衫)const、它的出现,让天下的所有刺客和黑客都闻风丧胆,在它的保护下,所有的变量都可以保存的完好无损const是constant的缩写,表示海枯石烂、恒定不变、一旦相伴、永不变心。只要一个变量前面用const来修饰,就意味着该变量的数据可以被访问,不能被修改。其实我们还可以叫它readonly.
虽然理解起const来相对比较容易理解,但是const不仅仅可以用来修辞基本类型,它还可以经常用来修辞一些构造类型和指针及其参合体,如数组、指针、指针数组、结构体数组、结构体指针数组一旦和这些复杂的类型结合起来还是有一定的迷惑性的.
例如:
(1) const int a = 10;
(2) int const a = 10;
(3) const int a[10] = {1,2,3, 4, 5, 6, 7, 8, 9, 10};
(4) const int *p;
(5) int * const p;
(6) const struct devices dev[5];
(7) struct devices const * dev[5];
看到上面的例子,我相信很多人都会倒吸一口冷气。话不多说直接看辨识技巧
将类型去掉;
看const修饰谁,谁就拥有铁布衫,谁的值就不能被修改,是readonly(1)去掉类型 int 变成“const a = 10”,a 拥有了铁布衫,a的值是不变的(2)去掉类型 int 变成“const a = 10”,a 拥有了铁布衫,a的值是不变的,这两个的效果一样(3)去掉类型 int 变成“const a[10]”, a[10]拥有了铁布衫,a数组里面的值是不变的(4)去掉类型 int 变成“const *p”,*p拥有铁布衫,p所指的空间里面的值是不变的(5) 去掉类型 int * 变成 “const p”,指针变量p拥有了铁布衫,指针变量p的值不变,也就是说p不能再指向其他地址了,但是p所指向的空间的值可变(6)去掉类型struct devices变成“const dev[5]”,dev[5]拥有了铁布衫,dev[5]数组的值不变(7)这是一个devices结构体类型的指针数组,它拥有5个devices结构体类型的指针,每个指针指向一个devices结构体,const修饰*dev[5],去掉类型struct devices变成“const *dev[5]”,指针数组*dev[5]拥有了铁布衫,指针数组dev中每个元素指向的空间里的值不变。
作用总结:
首先、const关键字修饰变量名的时候,把这个变量变为是一个只读变量,这里的只读不是全局数据区的or段。它所修饰的变量原来是在哪个区域,const修饰之后它还在那个区域。比如修饰一个局部变量const int num = 5;那么这个局部变量还是存在栈空间上。它本身对应的内存空间还是可以变的。但是不可以通过num去修改它。如果定义一个指针指向num的地址。则可以改变num的值。其次、const可以修饰形参(保护形参不被修改),在这一点上,站在实现者的角度,const可以防止函数对实参修改带来的问题。站在调用者的角度来说,它对于实参只能访问,不能修改。所以、合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。
WLAN技术的优缺点和拓扑结构
拒绝服务攻击的原理和解决方式
蓝牙核心规格4.0版本正式采用
人工智能时代怎样给医美行业带来改变
数字式三用表校验仪的维修
C语言里的铁布衫——const
为大家推荐五款音质动听新款长续航的蓝牙耳机
常用滤波器对电流谐波衰减特性概括
美高森美继续扩大碳化硅产品组合提供 下一代1200 V SiC MOSFET样品和700 V肖特基势垒二极管器件
飞腾2021年芯片交付将超200万片 国产CPU 2022年将迎来春天
OPPO全球算力中心即将投入运营
丽清2019年全年合并营收41.33亿元 疫情将正面冲击2020年首季整体营运表现
研究表明远程医疗技术可以减少医院患者的入院情况
电能质量在线监测方案解析
旷视科技宣布完成D轮第二阶段股权融资
多核处理器内核IP得到了 SMIC 工艺下的流片验证
大数据怎样提高数据保护风险
cpu的性能与哪一些因素有关系
黄仁勋表示Windows太臃肿 不适合平板电脑
被华为超过后,苹果给 iPhone 加上这功能