const增强
-
c语言中const是伪常量,可以通过指针修改
-
c++中const会放到符号表中
-
c语言中const默认是外部连接,c++中const默认是内部链接
#include<iostream> using namespace std; const int m_a = 10; //在全局区域里,受到保护,不可以被更改 /*c语言中,const修饰的变量,是伪常量,编译器是会分配内存的、 c++中,const不会分配内存,const int m_B=20; */ void test07(){ //m_a = 100; 不允许被修改 const int m_B = 20; //m_B = 100; 不允许被修改 int *p = (int *)&m_B;//*p指向的是临时的那块空间,临时空间看不到,临时的空间被更改,但m_B没有被改 *p = 200; printf("*p=%d,m_B=%d\n", *p, m_B); //c中*p 和m_B都是200 //c++中m_B为20,没有被更改 } int main() { test07(); system("pause"); }
const分配内存情况
-
对变量取地址,会分配临时内存
-
extern关键字下的const会分配内存
-
用普通变量初始化cosnt变量
-
自定义数据类型会分配内存
#include<iostream> #include<string> using namespace std; //1.const分配内存,取地址会分配临时内存 //2.extern 编译器也会给const 变量分配内存 void test01() { const int m_A = 10; int *p = (int *)&m_A;//会分配临时内存 } //3.用变量初始化const的变量 void test02() { int a = 10; const int b = a;//会分配内存 int *p = (int *)&b; *p = 1000; cout << "b= " << b << endl; } //4.自定义数据类型 加const也会分配内存 struct Person { string m_Name; //姓名 int m_Age; }; void test03() { const Person p1; //p1 m_Name = "aaa"; Person *p = (Person*)&p1; p->m_Name = "德玛西亚"; (*p).m_Age = 18; cout << "姓名 " << p1.m_Name << "年龄 " << p1.m_Age << endl; } int main() { test03(); system("pause"); return 0; }