为了账号安全,请及时绑定邮箱和手机立即绑定

指针指向问题

char * const foo = "helloworld";

这里指针指向不可变,但指向的空间中的数据可变,请教一下老师这里如何改变变量 foo 内存空间中的数据呢?

我尝试了如下做法,发现并没有输出,请教一下为什么不报错?又为什么没有任何输出?谢谢老师!

foo[0] += 'c';
cout << foo << endl;


正在回答

1 回答

这是一个很特别的情况。 
理论上是要报错的,应该无法执行,编译阶段就报错。
"helloworld" 是字符串常量,它是不允许被修改的
所以你说的“....  但指向的空间中的数据可变” 这句话不对。 字符串常量存放的位置是很特殊的,是只读的,不允许修改。

可以像下面这样做:
char arr[20] = "helloworld";
char * const foo = arr;
foo[0] += 'c';
cout << foo << endl;


0 回复 有任何疑惑可以回复我~
#1

慕侠2466091

补充一下,我不知道你用“+”的目的。 foo[0] += 'c'; 改为 foo[0] = 'c'; 更容易看出我的方法,修改foo[0]是有效的
2020-10-22 回复 有任何疑惑可以回复我~
#2

Brannua 提问者 回复 慕侠2466091

哈哈赞,感谢同学!之前刚学c++写出了这么无语的代码哈哈哈,我理解你这里就是手动开辟了字符数组,用 "helloworld" 初始化这个字符数组,这个字符数组由于是程序员自己开辟的,所以属于c语言中的字符串变量,无论用 foo 这个常指针还是用字符数组默认返回的首地址(也就是通过arr[i])的方式,都可以读写字符数组中的内容。
2020-10-27 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之封装篇(下)
  • 参与学习       70931    人
  • 解答问题       514    个

封装--面向对象三大特征之一,通过案例让C++所学知识融会贯通

进入课程

指针指向问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信