指向常量字符的指针

2024-04-06

下面的代码指向a中的第一个字符字符数组可在只读存储器中使用。是对的吗?:

const char * ptr = "String one";

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

ptr = "String two";

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


该标准仅规定字符串文字具有静态存储时间,这意味着变量的生存期是直到程序结束为止,并且在程序启动时被初始化。中的相关部分C11标准草案 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf is 6.4.5段落6:

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

它可能位于只读存储器中,也可能是,但这是实现定义的。它不需要被释放,只需通过动态分配的内存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. 

你可以自己运行here http://coliru.stacked-crooked.com/view?id=6895540947d56af9dab606064fa9209a-f37ccd9fde735da9113f829339b56ada

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

指向常量字符的指针 的相关文章

随机推荐