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

Первый случай «if» не имеет синтаксической ошибки, но он не работает, а второй случай «если» работает очень эффективно, почему ?if в этом коде не работает, пока нет синтаксической ошибки

+2

Вы не использовали strcmp в первом случае, поэтому. Не требуется синтаксическая ошибка, но недостаточно. – jboockmann

+0

Потому что оператор first, сравнивающий объект с объектом, и это разные объекты. второй, если сравнивать содержимое объекта. –

+0

Потому что второе утверждение не является синтаксически правильным. И где у вас есть «информация», что вторая неэффективна? Вы никогда не запускали этот код, так что вы никогда не измеряли его производительность, не так ли? –

ответ

6

Это не так, как первый случай не работает вообще, он просто работает таким образом, что является не предназначен.

В соответствии с кодом,

if(s.name=="kolkata") 

попытка сравнить указатели сами. Этими указателями он не сравнивает содержимое указателя местоположения памяти.

Подойдя к точке, где вы ожидали ошибки синтаксиса, цитирование C11, глава 6.5.9, ограничения оператора равенства, (==)

  • оба операнда являются указателями на квалификацию или неквалифицированные версии совместимых типов;

Так,

if(s.name=="kolkata") 

является вполне действительным и законным код C, с синтаксической точки зрения. Логически, когда вы ожидаете сравнить содержимое указателя области памяти указателями, этот код бесполезен и не имеет смысла.

+0

, если вход «kolkata», тогда выход должен быть «деталями». Но это было не так. –

+0

Каков был ваш * актуальный * код? 'if (strcmp ((s.name," kolkata ") == 0)' не компилируется. –

+0

@WeatherVane Правильно, хорошая точка. :) –

 Смежные вопросы

  • Нет связанных вопросов^_^