C中指针的数据分配

Dee*_*pta 1 c

char *p = "abc"; 
char *q = "abc"; 

if (p == q) 
printf ("equal"); 
else 
printf ("not equal"); 
Run Code Online (Sandbox Code Playgroud)

输出:相等

它是编译器特定的,还是在标准中的某个位置定义为预期行为.

Mic*_*urr 6

允许编译器"合并"字符串文字,但不是必需的.

从6.4.5/6字符串文字:

如果这些数组的元素具有适当的值,则这些数组是否不同是未指定的.

实际上,编译器可以合并以下一组文字:

char* p = "abcdef";
char* q = "def";
Run Code Online (Sandbox Code Playgroud)

q可能指向'内部'指向的字符串p(即.q == &p[3]).