指针

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

const char * ptr = "String one";

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

ptr = "String two";

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

该标准仅表示字符串文字具有静态存储持续时间,这意味着变量的生命周期是直到程序结束,并且在程序启动时被初始化. C11 draft standard年度有关部分为6.4.5第6段:

[…] The multibyte character sequence is then used to initialize an array of static storage duration and length just sufficient to contain the sequence. […]

它可能在只读内存中,可能只是实现定义.它不需要被释放,只有通过malloc动态分配的内存需要随后的调用才能释放.

如果我使用这个程序:

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. 

你可以自己运行here

翻译自:https://stackoverflow.com/questions/18003537/pointers-to-const-char

转载注明原文:指针