在没有语法错误的情况下,此代码中的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代码。 从逻辑上讲,当您希望通过指针比较内存区域指针的内容时,此代码是无用的,没有任何意义。