我正在开发一门自己的编程语言,它支持指针和常量。我想知道在C语言等其他语言中,常量是如何存储在内存中的?我在StackOverflow上读到过,运行时它们被存储在只读内存中,但我不明白这是如何可能的,因为下面的代码可以编译并成功执行:
#include <stdio.h>
int main (int argc, char ** argv) {
const int x = 1;
int *y;
y = &x;
*y += 1;
printf("x = %d\n", x); // Prints: 2
printf("y = %d\n", *y); // Prints: 2
return 0;
}
在这里,我定义了一个名为
x
的常量,并从中创建一个指针,以便我可以修改其值。这意味着x
不能存储在只读内存中。因此,我真的很想知道常量在运行时是如何存储的?
x
存储在只读内存中(并对C计算模型的实现方式做出某些假设)。 - Eric Postpischilconst
并不意味着常量,而是只读的... 是的,好吧,这很误导人。当我编译你的代码时,会出现warning: assigning to 'int *' from 'const int *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers]
的警告... 标准并没有描述这种规范,编译器可以自由地做他们喜欢的事情。 - Stargateur