Bonjour,
lors de la création d'un pointeur est ce que il y a une différence si on l'initialise a 0 ou a NULL ?
Merci
Bonjour,
lors de la création d'un pointeur est ce que il y a une différence si on l'initialise a 0 ou a NULL ?
Merci
Dans les faits, je dirai que c'est pareil. Simplement, par habitude, NULL c'est réservé aux pointeurs.
Si je voie "p = NULL", je déduit immediatement que p est un pointeur (de quoi, je n'en sais rien mais pointeur quand même) alors que si je voie "p = 0", je ne sais pas si p est un nombre ou un pointeur.
En plus, on n'est pas à l'abris d'une définition genre "#define NULL (void *)-1" (bien que cela soit peut probable)
Raymond
Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi
CafuroCafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
e-verbeUn logiciel de conjugaison des verbes de la langue française.
Ma page personnelle sur DVP.
pour moi non.
"Never use brute force in fighting an exponential." (Andrei Alexandrescu)
Mes articles dont Conseils divers sur le C++
Une très bonne doc sur le C++ (en) Why linux is better (fr)
Salut,
Au final, on peut répondre que non.
Seulement, NULL n'est , le plus souvent, jamais qu'un terme déclaré grâce à 'un macro (dont tu peux t'attendre à trouver une définition dans des fichiers tels que cstddef, cstdio, cstring, ctime, cwchar) sous une forme proche de
ou sous une forme proche de
Code : Sélectionner tout - Visualiser dans une fenêtre à part #define NULL (void*) 0
Sauf que, voilà... NULL est la seule adresse dont il soit certifié qu'elle est invalide, et qu'une impléméntation pourrait très bien décider de la faire pointer sur autre chose que 0X00000000
Code : Sélectionner tout - Visualiser dans une fenêtre à part #define NULL 0
Comme il n'y a, à ma connaissance (bien que je pourrais le vérifier), pas de précision dans la norme autre que "défini une adresse invalide", il n'est pas impossible d'envisager qu'une implémentation particulière puisse définir NULL comme valant ... autre chose que 0.
L'idéal est donc, à mon sens, de toujours préférer l'utilisation de NULL à celle de 0, ne serait ce que parce que, dans l'idée générale, NULL s'applique principalement à un pointeur, et donc, fournit une information intrinsèque que 0 ne fournit pas.
Maintenant, il ne s'agit ici que d'un avis personnel... que je partage, mais tu trouveras surement sur le forum des gens qui ne le partagent pas![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Le grand Bjarne Stroustrup préconise l'emploi de 0 face au problème évoqué par ram_0000.
Raymond
Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi
CafuroCafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
e-verbeUn logiciel de conjugaison des verbes de la langue française.
Ma page personnelle sur DVP.
NULL est garanti être de type entier et de valeur 0 par la norme.
Ce qui ne signifie pas forcement que le pointeur nul vaut 0x00000000, d'ailleurs. Car lorsqu'on affecte NULL ou 0 à un pointeur il y a une conversion de la valeur entière 0 en pointeur nul qui peut avoir n'importe quelle représentation mémoire.
Le sujet a déjà été abordé à maintes reprises dans le forum. Tu trouveras beaucoup plus d'éléments de réponse grâce à une recherche avancée![]()
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++
Le guide pour bien débuter en C++ - Cours et tutoriels pour apprendre C++
Partager