浅谈const和constant(常量)

常量被存储在常量区,并且表示常量不能被修改

当我们在定义一个字符串时 正确的规范应该是
const char*str="hello";

它代表我们这个字符串常量不能被修改,但是你会发现如果str="world";编译也是正确的,为什么可以被修改?而*(str+1)='w';却不能被编译;
实际上"hello"这个字符串属于常量有自己的内存空间(也就是有单独的内存地址),所谓的不能被修改 ,实际上是不能修改此地址上的常量,所以类似
*(str+1)='w';就不能被编译;//*(str+1)仍在"world"这个字符的内存空间
同理 "world"这个字符串常量实际上是拥有一个新的地址空间,所以str="world";并未修改字符串(原地址的值)

`const char*str="hello";//地址为 0x010ffc00 {0x00257b30 "hello"}
 str="world";           //地址为 0x010ffc00 {0x00257b38 "world"}

而对于

指针常量 int* const a

常量指针const int* a

常量指针常量const int* const a

的区别

指针常量表示 此指针指向的对象(地址)不能被修改

int x = 10, y = 10;
int* const p1 = &x; //常量 p1的类型是  (int*)
*p1= 10;     // correct 指针常量可以改变指向对象的值
p1 = &y;      // Error! 指针常量不能更改指向对象(地址)

常量指针表示 此指针指向的对象的值不能修改

const int x = 10;
const int* p1;
p1 = &x;      //指针 p1的类型是  (const int*)
*p1 = 15;     // Error!(改变原来x地址上空间的值了)

常量指针常量表示 此指针指向的对象的值和指向的对象(地址)皆不能被修改

int x = 10, y = 10;
const int* const p1 = &x;
*p1= 10;     //Error!
p1 = &y;      // Error! 
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值