-1
if(s.name=="kolkata")      
{
    printf("the details");
}
if(strcmp((s.name,"kolkata")==0) 
{
    printf("the details");
}

第一个“if”案例没有语法错误,但它仍然不起作用,而第二个“if”案例确实非常有效,为什么?

4

1 回答 1

6

这并不是第一种情况根本不起作用,它只是以一种非预期的方式起作用。

根据代码,

 if(s.name=="kolkata")  

是尝试比较指针本身。它不通过这些指针比较内存位置指针的内容。

来到您期望语法错误的地步,引用C11,第 6.5.9 章,相等运算符的约束,( ==)

  • 两个操作数都是指向兼容类型的合格或不合格版本的指针;

所以,

if(s.name=="kolkata")  

从句法的角度来看,它是一个完全有效且合法的 C 代码。从逻辑上讲,当您期望通过指针比较内存区域指针的内容时,这段代码是无用的,没有意义。

于 2016-04-19T11:36:02.663 回答