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 }