为什么const void *仍在C中更新?

时间:2016-09-18 03:52:53

标签: c

我有一些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变量不能直接更新,对所有类型都是正确的吗?

1 个答案:

答案 0 :(得分:3)

当您获得指向const的指针时,您有效地删除了int,将指针转换为没有const的内容,然后更改了值指向的

*(int*)vp = 11;

您可以将指针类型强制转换为任何其他指针类型。

修改这样的const变量是未定义的行为。例如,编译器可能已经看到变量是const,意识到它可以预先计算printf函数将打印的内容,并在编译时进行替换作为优化。允许编译器执行此操作,因为它认为变量是const