为什么str1 == str2"等于"?

时间:2015-03-12 15:01:12

标签: c string character

代码是:

#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;。

1 个答案:

答案 0 :(得分:6)

st1st2是只读字符串文字的指针。 (实际上你应该使用const char*作为类型,但编译器会对此放松。)

在这种特殊情况下,编译器优化了代码,因此只存储了一个字符串文字。允许此优化,因为C标准声明任何修改只读字符串的尝试都是未定义的行为。所以指针具有相同的地址。因此st1 == st2(比较指针地址的内容)是真的。

C标准没有规定这种行为,所以不要依赖它。