Const不是const?

时间:2016-10-29 15:32:42

标签: c pointers const

我的问题是为什么变量a的值会发生变化,尽管我已将其声明为const?对不起,如果这是一个微不足道的问题。

const int a = 8;
int* ptr = &a;

printf("variable: %d \n", a);
printf("pointer: %d \n", *ptr);

*ptr = 1;
printf("pointer: %d \n", *ptr);
printf("variable: %d \n", a);

输出:8 8 1 1

谢谢,祝你有愉快的一天!

1 个答案:

答案 0 :(得分:0)

您已将a限定为const,但当您将其地址指定给指针时,这会放弃const的效果,现在可以使用a轻松操作ptr。这很可能会调用未定义的行为。

GCC会在您编译程序时显示警告:

warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
        int* const ptr = &a;

如果您不想体验此效果,请将指针变量声明为指向常量的指针。 示例:const int* ptr=&a;