C字符数组初始化

时间:2012-11-27 00:35:21

标签: c arrays char

在以下代码中:

char *p = "Linux";

堆栈上的“Linux”内存或程序的只读段吗?

请参阅文章12 Interesting C Interview Questions and Answers中的问题9。

感谢。

2 个答案:

答案 0 :(得分:3)

实施可以随意存储在任何需要的地方。它是一个常量,因此它可以在只读存储器中,但不是必须的。

  

我的C编程讲师总是把它放在堆栈上,因此有疑问。

他可能意味着指针。考虑:

char *p = "Linux";
p = "Rules";

在第二行中,某些内容从指向“Linux”变为指向“规则”。刚改变的东西就在堆栈上。

答案 1 :(得分:0)

正如链接所说,它不存储在动态分配的内存中,而是存储在代码本身所在的内存中。即只读部分。因此,尝试更改它的原因导致了段错误。