求解释下面的const修饰指针的问题

代码1:
#include <iostream>
using namespace std;
void main()
{
char*const ch[2] = {"a","b"};
ch[0] = "A";//语句一
ch[1] = "B";//语句二
}
这里语句一和语句二都是错的【代码验证了,但是不懂】
代码2:
#include <iostream>
using namespace std;
void main()
{
int b = 500, c = 600;
int*const a = &b;
*a = 600;
}
这里的用法都是对的【代码验证了,但是跟代码1好像原理上不对了啊,const在*右边:代码1说不能改变值,但是代码2说能改变值】
请问代码1和代码2如何理解?
全部评论
第一个定义的是啥,第一个你定义成指针数组了吧
点赞 回复 分享
发布于 2017-08-10 12:09
两者都为顶层const但是要注意一下,带const的常量字符存储在常量区,常量地址唯一,第一个改变了地址。第二个地址不变,但是值可以变,a取的b的地址,在b的地址写入600你可以输出一下b。当然如果改为a=(int*)&***就会报错了
点赞 回复 分享
发布于 2017-08-10 12:13
第一个问题,字符指针指向的数据是保存在常量区的,不可以修改,所以两条赋值语句错误
点赞 回复 分享
发布于 2017-08-10 12:14
数组里面存放两个指针变量 ,这个指针变量 是常指针,就是说指向的地址不变,两个赋值操作都会改变变量的地址
点赞 回复 分享
发布于 2017-08-10 16:19
代码一:实际上是字符串数组是const,数组的内容不能更改; 代码二:a是const指针,a不能改变,但是指向的值是可以变的;建议你看看c++primer,上面讲的很详细
点赞 回复 分享
发布于 2017-08-10 18:46
ch数组存的是const char*,说明里面的ch[0]和ch[1]是只读的
点赞 回复 分享
发布于 2017-08-10 19:01

相关推荐

11-03 14:38
重庆大学 Java
AAA求offer教程:我手都抬起来了又揣裤兜了
点赞 评论 收藏
分享
喜欢吃蛋糕仰泳鲈鱼是我的神:字节可以找个hr 给你挂了,再放池子捞
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务