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

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

相关推荐
rainFFrain29 分钟前
Boost搜索引擎项目(详细思路版)
网络·c++·http·搜索引擎
long_run1 小时前
C++之模板函数
c++
NuyoahC1 小时前
笔试——Day43
c++·算法·笔试
彷徨而立2 小时前
【C++】 using声明 与 using指示
开发语言·c++
一只鲲2 小时前
48 C++ STL模板库17-容器9-关联容器-映射(map)多重映射(multimap)
开发语言·c++
智践行3 小时前
C++11 智能指针:`std::unique_ptr`、`std::shared_ptr`和`std::weak_ptr`
c++
智践行3 小时前
C++11之后的 Lambda 表达式 以及 `std::function`和`std::bind`
c++
智践行3 小时前
C++11移动语义‘偷梁换柱’实战
c++
祁同伟.4 小时前
【C++】模版(初阶)
c++
sTone873755 小时前
android studio之外使用NDK编译生成android指定架构的动态库
android·c++