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

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

相关推荐
努力努力再努力wz2 分钟前
【C++ 高阶系列】C++ 高性能网络编程:当 Reactor 遇见协程:从 epoll 回调到异步 MySQL,彻底打通任务挂起与恢复
网络·c++·mysql
霍霍的袁39 分钟前
【C++11】左值右值引用与移动语义详细笔记(左值右值、右值引用、移动构造、移动赋值、引用折叠、万能转发)
c++·笔记·学习·visual studio
布莱克60542 分钟前
C++ 中 unordered_set 与 unordered_map 有什么不同?一篇讲透
开发语言·c++·哈希
鶴哥只手遮天1 小时前
AFSIM 2.9.0 深度解析:架构、原理与工程实践-第 1 章 项目全景与代码地图
c++
充值内卷1 小时前
C++单文件迷宫游戏:TauriCPP 开发全记录
开发语言·c++·游戏
Antruly1 小时前
C++ Web 开发选型漫谈:从 Drogon 到 libuvcpp + uvp,八个项目的定位、兼容性与务实排名
开发语言·前端·c++
another heaven2 小时前
【C/C++ C++ 新特性中的那些内存优化的特性】
c语言·开发语言·c++
ysu_03142 小时前
【C++ 进阶之路】(二)从内联函数到类与对象:深挖内存对齐、this 指针与三大默认成员函数
开发语言·数据结构·c++·笔记·面向对象·this
布莱克6052 小时前
C++ 中 set 与 map 的区别详解
开发语言·c++·算法·哈希
我叫洋洋2 小时前
Allegro 画布“垃圾显示“清理指南:把板子调成干净工作台(实战总结)
c语言·c++·单片机·嵌入式硬件·eda·嘉立创