代码是:
#include<stdio.h>
int main()
{
char *st1="hello";
char *st2="hello";
if(st1==st2)
printf("equal %u %u",st1,st2);
else
printf("unequal");
return 0;
}
我得到输出&#34;等于4206628 4206628&#34;。
答案 0 :(得分:6)
st1
和st2
是只读字符串文字的指针。 (实际上你应该使用const char*
作为类型,但编译器会对此放松。)
在这种特殊情况下,编译器优化了代码,因此只存储了一个字符串文字。允许此优化,因为C标准声明任何修改只读字符串的尝试都是未定义的行为。所以指针具有相同的地址。因此st1 == st2
(比较指针地址不的内容)是真的。
C标准没有规定这种行为,所以不要依赖它。