c++ 中const

对于基础类型直接赋值

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

对自定义类型则直接开辟内存。通过修改指针可以对其修改。

相关推荐
xcyxiner2 小时前
snmp wireshark 抓包
c++
rocksun2 小时前
BJARNE STROUSTRUP谈C++的演变
c++
我不是代码教父2 小时前
[原创](Modern C++)现代C++的关键性概念: 非常独特的std::sentinel_for概念(哨兵概念)
开发语言·c++·sentinel
JuicyActiveGilbert2 小时前
【C++设计模式】第十六篇:迭代器模式(Iterator)
c++·设计模式·迭代器模式
commonbelive2 小时前
考研机试常见基本题型
c语言·c++·算法
希望_睿智2 小时前
C++网络编程之套接字选项配置
c++·网络协议
情深不寿3173 小时前
数据结构--AVL树
数据结构·c++
LuckyRich13 小时前
【高并发内存池】释放内存 + 申请和释放总结
开发语言·c++·缓存
明月看潮生3 小时前
青少年编程与数学 02-010 C++程序设计基础 29课题、继承
开发语言·c++·青少年编程·编程与数学
lucky1_1star4 小时前
FX-C++结构体与类的区别
开发语言·c++