面试题:C/C++中const之间的区别

C/C++中const之间的区别
1.const关键字在笔试中也是经常出现的一个关键的知识点之一:
const在C.C++中也是有区别的,接下来为大家讲解下他们之间的不同之处:
相同点:const就是被修饰的为常量:
不同点为:
在C语言中:

const int a = 10;//a是只读变量
//在c语言中const修饰变量名 说明变量名为只(用户不能通过变量名a进行赋值)a = 200;是err
1.const修饰全局变量 是可读变量 默认为外部链接,放在全局中的文字常量区中(只读不可写),就算知道 a 地址也不能间接赋值,其他源文件的可以使用的
,但在使用的时候要在源文件中用extern声明一下
2.const修饰局部变量时,系统会在栈区(可读可写)中给a分配地址空间,但是不能通过变量名赋值,如果知道a的地址,可以通过地址间接给a赋值.

在C++中深入理解(有点复杂)

//在c++中:
const int num = 100;
1.const 修饰变量为全局时, 变量为只读 默认为内部链接,
只能在当前源文件中可以访问,其他文件无法访问(该文件外
不可以见)
但是如果必须要在其他源文件中使用可读的全局变量,就必须
在前面加上extern转换为外部链接(extern const int num = 100;)
(更重要的部分来了)
const int a= 100;
int *p = (int *)&a;
*p = 210;
cout<<"*p的值为:"<<*p<<endl;//空间修改成功*p = 210;
cout<<"a的值为:"<<a<<endl;//你觉得是多少呢?a = 210?
答案是:a = 100;//为什么呢?a 的值不变.
2.const修饰局部变量时,
2.1在c++中不必分配内存空间,对于const的修饰变量,编译
器会把它放在符号表中,是否为其分配内存空间依赖于如何使
用。只要仅仅用来把一个名字用一个值代替(类似 #define 宏
定义)在该函数中有出现a的话编译器就会去符号表中去取。
2.2.在c++中取地址的时候,系统会为a开辟内存空间
②.在C++中,用一个变量bb去初始化 const修饰的变量,系统
会直接给a开辟内存空间,不会放在符号表中,下列可以通过地址间接给a赋值。
int bb = 2;
const int a = b;
int *p = (int *)&a;
*p = 210;
cout<<"*p的值为:"<<*p<<endl;//空间修改成功*p = 210;
cout<<"a的值为:"<<a<<endl;//a = 210?
3.const修饰自定义数据类型(结构体,对象)系统会分配空间.

(那什么情况下,会在符号表中呢?)

答:用const修饰时,用一个简单的符号来代表一个简单的值。

注: 感谢大家的阅读,若用问题请及时提出.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值