- c:const为伪常量,可用指针修改(只能修改局部const,全局const受到了保护)
const int m_A = 10; //全局const收到保护,不可以改 void test07() { //m_A = 100; const int m_B = 20; //c语言const为伪常量,可以通过指针修改 //m_B = 100; int * p = (int *)&m_B; *p = 200; printf("*p = %d , m_B = %d \n", *p, m_B); //int arr[m_B]; 不可以初始化数组,m_b不是真常量 }
-
c++:const为真常量(未分配内存),只要分配了内存就可以通过指针修改
-
const分配内存 取地址会分配临时内存
const int m_A = 10; //与c一样全局const收到保护,不可以改 void test07() { //m_A = 100; const int m_B = 20; //c++ const为真常量,不可以通过指针修改 //m_B = 100; int * p = (int *)&m_B;//会分配临时内存,temp=m_B;int * p = (int *)&temp; *p = 200;//相当于改变temp的值,m_B不变 cout<<*p<<; cout<<m_B <<; //int arr[m_B]; //可以初始化数组,m_b是真常量 }
-
extern 编译器也会给const变量分配内存
-
用普通变量初始化 const 的变量
//3、 用普通变量初始化 const 的变量 void test02() { int a = 10; const int b = a; //会分配内存 int * p = (int *) &b; *p = 1000; cout << "b = " << b << endl; }
-
自定义变量如结构体也会给const变量分配内存
//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; }