【发布时间】:2016-10-29 15:32:41
【问题描述】:
我的问题是为什么变量 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
谢谢,祝你有美好的一天!
【问题讨论】:
-
所以你问如果你违反你保证的合同,为什么代码会暴动?但是你的编译器应该已经警告过了,你有什么理由忽略它吗?注意:C 没有除 enum-constants 以外的符号常量。
-
一般来说,C 语言标准确实允许从'pointer to const' 转换为'pointer to non-const',所以程序在运行时的确切行为是不确定的。更具体地说,这个程序的运行时行为是依赖于编译器的。如果编译器在可执行映像的只读段分配 const 变量,那么在执行
*ptr = 1行时,您将遇到内存访问冲突(又名 segmentation fault)。如果它在可执行映像的读写段上分配它们,则该行将成功执行。