qfedu-cpp-level/day1/d12.cpp

37 lines
1.5 KiB
C++
Raw Normal View History

// 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;
}