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

Ric*_*wal 1 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;
}
Run Code Online (Sandbox Code Playgroud)

我得到输出"相等4206628 4206628".

Bat*_*eba 6

st1并且st2是指向只读字符串文字的指针.(真的你应该使用const char*类型,但编译器对此放松.)

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

C标准没有强制要求这种行为,所以不要依赖它.