对于基础类型直接赋值
cpp
void test01(){
const int data=10;
cout<<"data="<<data<<endl;
int * p =(int*)&data;
*p = 1000;
cout<<"*p="<<*p<<endl;
cout<<"after data="<<data;
}
c++中,对于基础类型,const 不开辟内存空间,data放在符号表中,类似于#define,但是在对data取地址的时候,系统会开辟空间,但是我们打印的时候是变量名,从符号常量表中取数据,所以可以理解为对data无影响
使用变量对const对象赋值
cpp
void test01(){
int a =10;
const int data=a;
int *p = (int *)&data;
cout<<"data="<<data<<endl;
*p = 2000;
cout<<"after data="<<data;
}
用变量为其赋值,则会开辟空间,而不是放入符号表中,则可以通过指针修改。
自定义类型(结构体、类)
cpp
struct person{
char *name;
int age;
}
void test01(){
const person per ={"lucy",100};
cout<<"name:"<<per.name<<" age:"<<per.age<<endl;
person * p = (person*)&per;
p->name = "yz1";
p->age = 1000;
cout<<"name:"<<per.name<<" age:"<<per.age<<endl;
}
对自定义类型则直接开辟内存。通过修改指针可以对其修改。