37 lines
1.5 KiB
C++
37 lines
1.5 KiB
C++
|
// const
|
|||
|
// c++ 中 const 在定义时不会创建内存空间,取地址时会创建内存空间
|
|||
|
// 或者把它定义为 extern 时,也会创建内存空间
|
|||
|
|
|||
|
#include <iostream>
|
|||
|
#include <cstdio>
|
|||
|
|
|||
|
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;
|
|||
|
}
|