Question

Je suis un étudiant de programmation en essayant de mieux comprendre les pointeurs, l'une des choses que j'ai appris est que vous pouvez définir un pointeur NULL. Ma question est, quelle est la différence entre ces deux déclarations? Quand souhaitez-chacun d'entre eux retourne vrai / faux?

if (some_ptr ==  NULL)

if (*some_ptr == NULL)

Merci!

Était-ce utile?

La solution

Le premier fait une comparaison avec l'adresse de la variable à null, la seconde déréférence le pointeur, obtenir la valeur maintenue à elle et la compare à l'encontre nulle.

Autres conseils

La première déclaration fait référence à l'adresse réelle du pointeur some_ptr pointe. Dans le cas où il est NULL (la valeur représentée par la définition NULL), il est vrai, sinon pas.

La dernière déclaration se réfère au contenu à l'adresse du pointeur pointe. Donc, si vous avez des points some_ptr à un nombre entier, et que nombre entier se trouve être le même que définir votre null, la deuxième condition est évaluée à true.

La première est que l'on compare le pointeur lui-même contre NULL, ce qui semble souhaitable.

La seconde est que vous êtes le premier déréférencement le pointeur pour obtenir la valeur qui est ensuite comparé à NULL, comme vous comparez une valeur int à 0. en fonction de votre nom de la variable.

La première dit:
Est some_ptr NULL?

Le deuxième dit:
Est quel que soit some_ptr pointe vers NULL?

Pour exemple: int * x; Ici, si vous voulez vérifier si les points x à NULL nous utilisons la première déclaration. Avec les mêmes x int *, si vous utilisez la deuxième déclaration, alors vous essayez de déréférencer le pointeur et vérifier la valeur x points. Parce que NULL est 0 en C, C ++, il vérifie la valeur 0 que x points.
EDIT:. De même avec la deuxième déclaration, si x à des points NULL, deferencing alors un résultat pointeur NULL dans une goutte de base sous UNIX

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top