qfedu-cpp-level/day1/d12.cpp

37 lines
1.5 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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