// const // c++ 中 const 在定义时不会创建内存空间,取地址时会创建内存空间 // 或者把它定义为 extern 时,也会创建内存空间 #include #include using namespace std; int main() { /* const int n = 10; // 不会创建内存空间,相当于宏定义 printf("n addr = %p\n", &n); // 取 const 变量的地址时会创建内存空间 return 0; */ /* // C++ 中 const 的特性:在定义时不会创建内存空间,取地址时会创建内存空间 const int x = 10; // 在符号表中创建 x,即没有在栈中开辟空间 int *p = (int *)&x; // 在栈中开辟空间,p 指针指向,空间的值是 x 符号表中的数据 *p = 100; // 修改的是栈中的空间,而不是符号表中的数据 cout << "x = " << x << endl; cout << "*p = " << *p << endl; */ // 如果 const 变量初始化为一个变量时,则会在栈中开辟空间 int x = 20; // 在栈中开辟空间,存储常量 20 const int X = x; // 在符号表中创建 X,并且赋值变量,此时在栈中开辟空间,存储常量 20 int *p = (int *)&X; // p 指向了 x 的地址,但是 x 是 const,所以 p 不能修改 x 的值 *p = 100; // 会修改栈中的空间,而不是符号表中的数据,因此 X 的值会改变 cout << "x = " << x << endl; cout << "X = " << X << endl; cout << "*p = " << *p << endl; // *p = 100 return 0; }