看到我之前问题的答案后,忍不住要问。
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将是一个更大的困难数字,那么它也很有可能最终进入只读存储器。