尖括号为Const Char

以下代码指向只读内存中可用的char数组中的第一个字符 。 是对的吗?:

const char * ptr = "String one"; 

现在当ptr开始指向另一个内存位置时:

 ptr = "String two"; 

第一个char数组会发生什么? 执行结束时是否释放了该内存位置?

该标准仅表示字符串文字具有静态存储持续时间 ,这意味着变量的生命周期直到程序结束并且在程序启动时初始化。 C11标准草案的相关部分是6.4.56段:

[…]然后使用多字节字符序列初始化静态存储持续时间和长度的数组,该数组足以包含序列。 […]

它可能在只读存储器中,可能只是实现定义。 它不需要被释放,只有通过malloc动态分配的malloc需要后续的free调用。

如果我使用这个程序:

 int main() { const char * ptr = "String one"; return 0; } 

然后用gcc构建它然后使用objdump

 objdump -s -j .rodata a.out 

我们会发现在这种情况下它确实存储在只读数据部分:

 Contents of section .rodata: 400580 01000200 53747269 6e67206f 6e6500 ....String one. 

你可以在这里自己运行