我有一些const void*
的代码如下:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main()
{
const int p = 10;
char s[] ="I am newbie";
const void *vp;
vp = &p;
*(int*)vp = 11;
printf("%i\n", *(int*)vp);
vp= s;
printf("%s\n", (char*)vp);
return 0;
}
我的问题是为什么const void* vp
仍在更新?
据我所知,const变量不能直接更新,对所有类型都是正确的吗?
答案 0 :(得分:3)
当您获得指向const
的指针时,您有效地删除了int
,将指针转换为没有const
的内容,然后更改了值指向的。
*(int*)vp = 11;
您可以将指针类型强制转换为任何其他指针类型。
修改这样的const
变量是未定义的行为。例如,编译器可能已经看到变量是const
,意识到它可以预先计算printf
函数将打印的内容,并在编译时进行替换作为优化。允许编译器执行此操作,因为它认为变量是const
。