如果Else在C中变量变量

Abh*_*dey 2 c string comparison-operators

我是C初学者,我不明白为什么这段代码不起作用?

void main(){
    char userInput = "a";

    if(userInput == "a"){
        printf("a");
    } else printf("b");

    getch();
}
Run Code Online (Sandbox Code Playgroud)

返回"b"

但这一个正在发挥作用

void main(){
    char userInput;

    if("a" == "a"){
        printf("a");
    } else printf("b");

    getch();
}
Run Code Online (Sandbox Code Playgroud)

返回"a"

有什么不同?

Sou*_*osh 5

表示"a"为的字面值是字符串文字.基本类型是chars 的数组,如char [size].它不是兼容的类型char,因此赋值

char userInput = "a";
Run Code Online (Sandbox Code Playgroud)

无效.

你想使用一个字符常量,你写的东西就像

char userInput = 'a';
Run Code Online (Sandbox Code Playgroud)

也就是说,if("a" == "a")似乎在您的情况下有效,但它并不像您认为的那样.它不比较内容,而是比较字符串的基地址(第一个元素的地址),在您的情况下,它们似乎是相同的.您的编译器碰巧使用相同的内存位置来获得相同的字符串文字(优化) - 因此您会看到一个真实的结果,但标准并不能保证这一点.一个(ny)编译器可以自由选择它自己的内存分配策略,有或没有优化过程.

使用gcc,如果-fno-merge-constants用作编译选项,则此条件应该评估为falsy.