C和C++中const的区别

1.区别

在C中,const修饰的变量是常变量(或伪常量),会分配内存空间,凡是分配内存的变量基本都可以通过指向其地址空间的指针去修改其内容,所以虽然不能直接修改,但可以通过指针修改,故叫做伪常量。
在C++中,const修饰的变量是真正的常量,必须初始化,通常不会为其分配内存,这些常量以键值对的形式存放在一张符号表中,编译过程中若发现该常量则直接以符号表中的值替换。

const区别CC++
是否分配内存依具体情况而定
默认链接方式外部链接内部链接
是否需要初始化不一定必须初始化
范例:const int a=5;
int arr[a]={0};
编译不通过编译通过

说明:
(1)内部链接:编译器只对正被编译的文件创建存储空间,别的文件可以使用相同的表示符或全局变量.C/C++中内连接使用static关键字指定。
(2)外部链接:所有被编译过的文件创建一片单独存储空间.一旦空间被创建,连接器必须解决对这片存储空间的引用.全局变量和函数使用外部连接.通过extern关键字声明,可以从其他文件访问相应的变量和函数。
简单点说,在C中你在一个源文件中有const int a=10;那么在另外的源文件中可以这样使用这个变量extern const int e;,即在C中const修饰的变量可以被外部文件使用。而在C++中,使用const修饰的变量只能在当前文件中使用。

2.C++中使用const修饰变量时,分配内存的情况:

分配内存的情况示意代码
1.用普通变量初始化const修饰的变量int b = 10;
const int a = b;
2. const修饰引用const int &a = 10;
3.自定义数据类型struct Student {
char name;
int age; };
const Student s={‘w’, 10};
以上情况都可以通过指针去修改其内容如:int * p = (int *)&a;
*p = 100;
//对应a的值也会改变
4.使用&操作符取const常量的地址const int a = 5;
int *p = (int *)&a;
*p = 100;
//注意这种情况分配的是临时内存空间,指针p并不会去修改a的值
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值