当前位置:网站首页>const理解之二
const理解之二
2022-06-23 03:51:00 【苍茫也初心】
在上一篇《const理解之一》中,开始是这么说的:
const在C语言中算是一个比较新的描述符,我们称之为常量修饰符,意即其所修饰
的对象为常量(immutable)。
这样说,有些绝对,或者说不太全面,下面是百度来的。
只读变量与常量
例:为什么下面的例子在使用一个const变量来初始化数组,ANSI C的编译器会报告一个错误呢?
const int n = 5;
int a[n];
答案与分析:
1)这个问题讨论的是“常量”与“只读变量”的区别。常量,例如5, “abc”,等,肯定是只读的,因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它。而“只读变量”则是在内存中开辟一个地方来存放它的值,只不过这个值由编译器限定不允许被修改。C语言关键字const就是用来限定一个变量不允许被改变的修饰符(Qualifier)。上述代码中变量n被修饰为只读变量,可惜再怎么修饰也不是常量。而ANSI C规定数组定义时长度必须是“常量”,“只读变量”也是不可以的,“常量”不等于“不可变的变量”。但是在C++中,局部数组是可以使用变量作为其长度的。
2)但是在标准C++中,这样定义的是一个常量,这种写法是对的。实际上,根据编译过程及内存分配来看,这种用法本来就应该是合理的,只是ANSI C对数组的规定限制了它(实际上用GCC或VS2005编译以上代码,确实没有错误产生,也没有给出警告)。
3)那么,在ANSI C中用什么来定义常量呢?答案是enum类型和#define宏,这两个都可以用来定义常量。
这个例子说明了const修饰的变量,是只读变量,而不是彻底的常量。只读变量与常量还是略微有区别的。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
我们再
换个角度
看这个问题,从变量的左右值来看,用const修饰了的变量,是具有只读的左值,没有写入权,不能出现在赋值符号的左边,或者说只能是当作右值来用。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
下面这个也是百度上的,觉得有点意思,一并搬过来。
限定内容
例:下面的代码编译器会报一个错误,请问,哪一个语句是错误的呢?
typedef char * pStr;
char string[4] = “bbc”;
const char *p1 =” string”; //1式
const pStr p2 =” string”; //2式
p1++;
p2++;
答案与分析:
问题出在p2++上。
const使用的基本形式: const type m;限定m不可变。替换基本形式中的m为1式中的*p1,替换后const char *p1;限定*p1不可变,当然p1是可变的,因此问题中p1++是对的。替换基本形式中的type为2式中的pStr,替换后const pStr m;限定m不可变,题中的pStr就是一种新类型,因此问题中p2不可[1] 变,p2++是错误的。
最后的忠告:
强烈建议在初始化时说明指针的指向,防止出现野指针!
边栏推荐
- Flutter series: wrap in flutter
- Pta:7-63 calculate the number one in the college entrance examination
- Distance measure - cosine distance
- Mobile terminal city list sorting JS plug-in vertitylist js
- 麦肯锡:2021年量子计算市场投资增长强劲,人才缺口扩大
- 离线数仓建模中常见的概念-术语
- Cocos learning diary 2 - scripts and attributes
- Pta:6-33 student ranking table (destructor)
- 如何解决独立站多渠道客户沟通难题?这款跨境电商插件一定要知道!
- Please use the NLTK Downloader to obtain the resource
猜你喜欢

How to ensure application security

Cool mouse following animation JS plug-ins 5

Notes on writing questions in C language -- free falling ball

制造型企业开发的SRM供应商管理系统特点是什么

Leetcode 1208. 尽可能使字符串相等(终于解决,晚安)

X24cxx series EEPROM chip C language universal reading and writing program

Background ribbon animation plug-in ribbon js
![[pytoch] calculate the derivative of sin (x) by automatic differentiation](/img/a7/16dd9ecc13a986a9141ecc3fba00a1.png)
[pytoch] calculate the derivative of sin (x) by automatic differentiation

VGG 中草药识别

Particle animation background login page particles js
随机推荐
在Pycharm中使用append()方法对列表添加元素时提示“This list creation could be rewritten as a list literal“的解决方法
After Huawei online battle service players quickly match, different players receive different lists of players in the same room
Kali 安装之腾讯云经验遇到坑
抖音x-bogus和_signature参数分析
PTA:7-67 友元很简单2016final
win10下安装、运行MongoDB
How to ensure application security
Abnova ACTN4纯化兔多克隆抗体说明书
volatile 与线程的那些事
麦肯锡:2021年量子计算市场投资增长强劲,人才缺口扩大
Halcon知识:binocular_disparity 知识
五年连续亏损42亿,蘑菇如何渡劫?
Second assignment notes
What are the characteristics of SRM supplier management system developed by manufacturing enterprises
应急响应-hw复习
Pta:7-63 calculate the number one in the college entrance examination
自动化测试常见的面试题
距离度量 —— 余弦距离(Cosine Distance)
PTA:7-65 饮料的价格
大一学生课设c——服装管理系统