-2

看到我之前问题的答案后,忍不住要问。

char* msg = "Stack-overflow"; // Stored on read-only memory region of process.
int i=10; // Stored onto stack.

为什么"Stack-overflow"进程和值不会存储在只读内存区10

编辑以清除我的问题。

4

3 回答 3

2

这两个变量都不存储在只读存储器中。但是,内存msg 指向的是只读的。

不过,C 标准并未强制执行此操作——这只是常见的做法。以下问题中有关于此的更多信息:字符串文字:它们去哪儿了?

于 2013-04-15T18:10:09.540 回答
0

没有变量存储在只读内存中,msg 指向只读内存,因此如果我们尝试修改它,编译器将标记错误。虽然我们可以将 msg 分配给其他地址。(它的行为就像指向 C++ 中的常量对象的指针)

于 2013-04-18T09:43:51.293 回答
0

您应该将字符串"Stack-overflow"与变量进行比较10,将变量msg与变量进行比较i。您可以更改 的指针值,msg但不允许更改 的值10。如果这10将是一个更大的困难数字,那么它也很有可能最终进入只读存储器。

于 2013-04-15T18:11:44.410 回答