c和c++中的异同

本文比较了C和C++中const修饰变量的异同,包括全局变量和局部变量的存储区域、修改性以及内存分配情况。着重讨论了const修饰的变量在C++中的具体实现和内存管理。

C和C++ 中的异同:
相同点:
1.C和C++中的const修饰的全局变量都是保存在常量区,不能修改
不同点:
C语言中const修饰的局部变量赋值为常量是,局部变量保存在栈区,可以被修改
C++中const修饰的局部变量赋值为常量是,局部变量保存符号表中,不能被修改
C语言中const修饰的全局变量默认是外部链接属性
C++中const修饰的全局变量默认是内部链接属性


C++中const修饰的变量分配内存情况:
c++中const修饰的变量,分配内存情况
const修饰的全局变量在常量区分配了内存
对const修饰的局部变量赋值为常量时,对其取地址,会在栈区分配临时的内存空间
const修饰的局部变量赋值为变量时,局部变量保存在栈区
const修饰的局部变量时一个自定义变量,也是在栈区分配内存
只有一种情况,const'修饰的局部变量被赋值为常量时,这个局部变量保存在符号表中
1 #include <iostream>
2 using namespace std;
3 const int a = 1;//const修饰的全局变量在常量区分配了内存
4 void test01()
5 {
6 const int a = 10;//const修饰的局部变量赋值为常量没有分配内存,存在符号化表中
7 int *p = (int *)&a;//对const修饰的局部变量赋值为常量的变量取地址 会分配一个临
时的空间 int tmp =a *p =&tmp
8 }
9 void test02()
10 {
11 int b = 2;
12 //const修饰的局部变量赋值变量时 局部变量存在栈区
13 const int a = b;
14 int *p = (int *)&a;
15 *p = 100;
16 cout << a << endl;
17
18 }
19 struct stu
20 {
21 int a;
22 int b;
23 };
24 void test03()
25 {
26 //const修饰的变量为自定义变量时,保存在栈区
27 const struct stu obj = {1,2};
28 struct stu *p = (struct stu *)&obj;
29 p‐>a = 3;
30 p‐>b = 4;
31 cout << obj.a << " " << obj.b << endl;
32
33 }
34 int main()
35 {
36 test03();
37
38 return 0;
39 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值