const基础与一级指针,二级指针,引用的结合

本文详细探讨了const在C和C++中的基础概念和区别,包括const修饰的变量在C语言和C++中的不同处理方式。文章通过实例分析了const与一级指针、二级指针以及引用的结合,强调了const在防止间接访问风险中的作用,并总结了如何处理特殊情况,以避免潜在的内存修改风险。同时,还介绍了const与引用结合时的规则和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

const基础与一级指针,二级指针,引用的结合

 

const基础:

在之前学习C语言的时候,我们就写过const,现在学习了C++,发现之前对于const的理解有些偏差,不够深刻。今天,我们就深入探索一下在C语言和C++下const的区别。

 

一:const在C和C++中的区别

①:在C语言中,被const修饰的内容称作常变量。它本质是一个变量,因此,C语言中const修饰的变量并不能作为初始化数组长度的下标。

其特点只有一个:被修饰的内容不可以作为左值存在。

②:而在C++中,const修饰的内容叫做常量,在编译阶段会被当作立即数,可以当做初始化数组长度的下标。

其特点有两个:1.必须初始化,初始化的值必须是常量。 2.不允许普通的指针指向,只能用const类型的指针指向。

 

两者区别:

C语言里用const修饰的值可以不初始化,只是之后再没有机会对这个const修饰的变量赋值了。因此我们可以得出c语言里const定义的常变量和一般变量的区别很小,只是常变量定义后不能作为左值存在。但其本质,或者说是编译方式,和普通变量是一样的。

 

而在C++中,const修饰的量必须初始化,否则编译无法通过,即在编译的时候编译器会把使用const修饰的量都替换为其本身的值,因此就能作为数组下标了,因为编译时,编译器看到的下标并非const 定义的变量的名字,而是它对应的值的立即数。

 

我们下面将验证一下我们的结论:

①:

我们在.cpp文件中写下了这些代码,最终打印的结果是10和20,我们可以得出结果,程序运行后,指针p指向了a的内存,修改了a的值,这时a内存里存放的值就为20了,为什么最后打印a的值为10,不是20呢?

因为编译阶段已经把要打印的a换成了10这个立即数了,不会因为程序运行后,a值的改变而改变。

 

②:

刚说过c++里的const修饰的量必须初始化。初始化的值必须是个常量,不能是个普通变量,这样的原因是编译器编译时,替换const常量将会不明确,只有立即数或者之前定义过的const常量是明确的具体的数字。

我们这里看到b不能作为初始化数组长度的下标了,因为将变量a赋值给了常量b,b会退化成成为常变量。

而这里,我们间定义好的const常量赋值给了b,是允许的。

 

PS:并且在C++中,这个const修饰的数据,最终生成的符号是local属性的,即只有本文件可见的。因为编辑器不关注local区域,只关系global区域。

如果想要把const修

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值