const void *a 相关问题

yysr92 2017-11-30 11:37:09
const void *a
关于 const void *a 看到有如下解释:
这是定义了一个指针a,a可以指向任意类型的值,但它指向的值必须是常量。
在这种情况下,我们不能修改被指向的对象,但可以使指针指向其他对象。

实际验证过程中发现如下问题:
int main(int argc, char const *argv[])
{
const void *a;

int b = 5;
a = &b;
cout << *((int*)a) << endl;
//*a = 123;
*((int*)a) = 123;
cout << *((int*)a) << endl;

return 0;
}
代码如上,a = &b后,a指向b,此时无法通过*a修改b的值,即*a = 123;会编译报错,这一点是ok的。
但为什么 *((int*)a) = 123; 就能通过呢?而且还成功修改了值(b的值并未被修改)。
还请各位大大解答一下,谢谢!
...全文
381 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yysr92 2017-11-30
  • 打赏
  • 举报
回复
引用 3 楼 cyhh_h 的回复:
[quote=引用 2 楼 cyhh_h 的回复:] a的类型本来应该是const void * , 而你使用了类型隐式转换,转换成了int *, 这样就没有常量类型了。
是显示,敲错了[/quote] 原来如此,没想到这个问题,十分感谢您的指导!
勤奋的执着 2017-11-30
  • 打赏
  • 举报
回复
引用 2 楼 cyhh_h 的回复:
a的类型本来应该是const void * , 而你使用了类型隐式转换,转换成了int *, 这样就没有常量类型了。
是显示,敲错了
勤奋的执着 2017-11-30
  • 打赏
  • 举报
回复
a的类型本来应该是const void * , 而你使用了类型隐式转换,转换成了int *, 这样就没有常量类型了。
yysr92 2017-11-30
  • 打赏
  • 举报
回复
更正一下问题, *((int*)a) = 123; 后 b 的值实际上是改变了的,也变为了123

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧