看到我之前问题的答案后,忍不住要问。
char* msg = "Stack-overflow"; // Stored on read-only memory region of process.
int i=10; // Stored onto stack.
为什么"Stack-overflow"
进程和值不会存储在只读内存区10
?
编辑以清除我的问题。
这两个变量都不存储在只读存储器中。但是,内存msg
指向的是只读的。
不过,C 标准并未强制执行此操作——这只是常见的做法。以下问题中有关于此的更多信息:字符串文字:它们去哪儿了?
没有变量存储在只读内存中,msg 指向只读内存,因此如果我们尝试修改它,编译器将标记错误。虽然我们可以将 msg 分配给其他地址。(它的行为就像指向 C++ 中的常量对象的指针)
您应该将字符串"Stack-overflow"
与变量进行比较10
,将变量msg
与变量进行比较i
。您可以更改 的指针值,msg
但不允许更改 的值10
。如果这10
将是一个更大的困难数字,那么它也很有可能最终进入只读存储器。