在没有语法错误的情况下,此代码中的if情况不起作用

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

第一个“如果”的情况没有语法错误仍然不起作用,而第二个“if”情况确实非常有效,为什么?

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

根据代码,

  if(s.name=="kolkata") 

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

到了预期语法错误的地步,引用C11 ,第6.5.9章,Equality运算符的约束,( ==

  • 两个操作数都是指向兼容类型的限定或非限定版本的指针;

所以,

 if(s.name=="kolkata") 

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