C 语言中的字符串是如何编译的?根据我的理解,在 test1 中,字符串“hello”被编译器放入数据段中,并在第二行中为 p 分配了硬编码的虚拟地址。它是否正确?并且 test1 的工作方式和 test2 的工作方式之间没有基本区别。
一些代码:
#include <stdio.h>
test1();
test2();
test3();
main()
{
test1();
test2();
//test3();
}
test1()
{
char *p;
p="hello";
}
test2()
{
char *p="hello";
}
test3()
{
char *p;
strcpy(p,"hello");
}
Run Code Online (Sandbox Code Playgroud)
任何来自 C 标准的参考都将不胜感激,这样我就可以从编译器的角度深入理解这个东西。
从 C 标准的角度来看,对于文字字符串的放置位置没有特殊要求。关于字符串文字存储的唯一要求在 C99 6.4.5/5“字符串文字”中:
"hello"示例中的各种文字可能具有也可能不具有相同的地址。你不能指望这两种行为。