2017-10-19 4 views
6

Lasst uns a sagen ist ein Zeiger, und nach dem Speicher für den verteilenden, möchte ich, wenn der Speicher zugewiesen wurde erfolgreich zu überprüfen, habe ich diese zwei Möglichkeiten gesehen tun:In C ist die Bedingung: "if (a! = NULL)" das gleiche wie die Bedingung "if (a)"?

if(a != NULL) 

if(a) 

Was zwischen dem ersten ist der Unterschied und zweite Aussagen?

+4

Sie werden als das gleiche enden. – Steve

+0

NULL ist ein Makro, das normalerweise als 0 definiert wird. Der erste Ausdruck ist also derselbe wie (a! = 0), der zweite prüft auch, ob a! = 0 ist. Daher ist derselbe Edit: normalerweise –

+0

Ja, wenn * 'a' * ist ein Zeiger, er kann unterschiedlich sein, wenn 'a' kein Zeiger ist, der von der Definition von' NULL' abhängt. –

Antwort

0

(a! = NULL) gibt einen booleschen Wert zurück, der für (a) dasselbe ist. Eine if-Anweisung gibt false zurück, wenn der Inhalt gleich 0 und andernfalls wahr ist. NULL bedeutet 0, also wenn a == 0 die if return false. So ist es genau das gleiche für den Compiler.

Hoffe es hilft dir!

0

Es gibt keinen funktionalen Unterschied; Sie sind gleichwertig und beide testen auf Nullzeiger.

Jede Präferenz ist rein subjektiv. Verwenden Sie einfach einen, den Sie mögen, oder das, was von Ihren anderen Programmierern in Ihrem Projekt/Ihrer Organisation verfolgt wird.

+0

Könntest du ein wenig weiter ausführen? – Marievi

2

ist die Bedingung: if(a != NULL) das gleiche wie die Bedingung if(a)?

Sie erreichen den gleichen Zweck. Der einzige wirkliche Unterschied liegt in der Lesbarkeit.


Ihre Wirkung ist die gleiche, da sie dasselbe ergeben werden.

NULL ist ein Makro, das fast immer 0, so ist:

if(a != 0) 

, die ziemlich ähnlich ist:

if(a != NULL) 

äquivalent ist

if(a) 

da es Überprüfen Sie, ob der Ausdruck a wahr ist. Wenn a ein Zeiger ist, werden sie gleich sein. Wenn nicht, hängt es davon ab, wie NULL definiert ist (was wie gesagt almost always 0 ist).

+1

Könntest du ein wenig weiterarbeiten? – Marievi

+0

sicher @Marievi, auf meinem Weg. – gsamaras

1

Nach c faq:

if (p) entspricht if (! P = 0)

und dies ist ein Vergleich Kontext, so der Compiler kann sagen, dass die (implizite) 0 ist eigentlich ein Nullzeiger Konstante, und verwenden Sie den richtigen Nullzeigerwert. Es gibt keine Betrügereien beteiligt hier; Compiler funktionieren auf diese Weise und erzeugen für beide Konstrukte den identischen Code . Die interne Darstellung eines Nullzeigers spielt keine Rolle.