begin process at 2012 05 28 09:27:57
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Divers

 > 

Pour assigner un pointeur ...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Pour assigner un pointeur ...

lundi 17 juillet 2006 à 18:16:51 | Pour assigner un pointeur ...

wismerhill__

Il me semblait que pour declarer un pointeur il fallait faire
double* pointeur = NULL;
Mais dans un cours de C++ et des codes, je vois des 0,

Peut on declarer des pointeurs sur des type simple par 0 ???
double* pointeur = 0;
Peut on declarer des pointeurs sur des objet de classes pareillement ???
Maclasse* MonObjet = 0;


wis :
in tartiflette I trust (like the others)
lundi 17 juillet 2006 à 18:30:23 | Re : Pour assigner un pointeur ...

Joky

Membre Club
Réponse acceptée !
#define NULL ((void*)0)

Le cast serait-il implicite en C++ ?

ULARGE_INTEGERJokyQi=QI("Joky"

lundi 17 juillet 2006 à 18:38:22 | Re : Pour assigner un pointeur ...

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
Un pointeur n'est qu'une adresse, 0 en vaut une autre.

ciao...
BruNews, MVP VC++
lundi 17 juillet 2006 à 20:00:52 | Re : Pour assigner un pointeur ...

wismerhill__

Salut, je prend donc vos reponses comme un oui ... ??
Oui


wis :
in tartiflette I trust (like the others)
lundi 17 juillet 2006 à 23:15:07 | Re : Pour assigner un pointeur ...

steve_clamage

En C comme en C++ on peut écrire :
double* pointeur = 0;

c'est équivalent à :
double* pointeur = (double *)0;

Mais la vrai question c'est pourquoi le standard C++ ne définie pas la macro NULL ?

D'abord il faut savoir que l'adresse nulle n'est pas forcément l'adresse 0, par contre les standards (C et C++) garantissent que la valeur 0 "castée" en pointeur est l'adresse nulle. C'est pour ca qu'n C elle est définie ainsi :
#define NULL ((void *)0)
c'est à dire 0 convertie en pointeur, et pointeur de type void car le C autorise les conversions dans les 2 sens entre un pointeur void et un pointeur d'un autre type.

Le standard C définie la macro NULL pour palier à une faiblesse du langage, cette faiblesse c'est le fait qu'une fonction peut etre déclarée sans connaitre le type et le nombre d'argument.
Soit la fonction f définie ainsi :
int f(char * p) {}

sa déclaration est :
int f();

et son prototype (qui inclue la déclaration) non obligatoire :
int f(char *p);

Le prototype est par contre obligatoire en C++ (ne pas oublier que C et C++ sont incompatible, bien que syntaxiquement trés proche), c'est même une caractéristique du C++ reprise par le C (C89).

Donc en C, lorsque le compilateur doit résoudre l'appel d'une fonction, bien que celle-ci soit déclarée, il peut ne pas connaitre le nombre et le type des arguments.
Si j'appelle la fonction f de cette facon :
int n = f(NULL);

le compilateur détermine à partir de cet appel que la fonction prend un argument de type void * (ce qui n'est pas tout a fait vrai mais assimilable), donc aucun probleme.

Par contre en appelant la fonction f de cette facon :
int n = f(0);

Le compilateur en déduit que la fonction f prend argument de type int, et la ca peut poser 2 problemes suivant l'architecture :
- d'abord si la taille d'un int est différente de la taille d'un pointeur, on empilera plus ou moins d'octets que prévue, la pile sera corrompue dans le contexte de la fonction.
- ensuite si l'adresse nulle n'est pas la valeur 0 elle ne sera pas interprètée comme telle dans la fonction.

Comme en C++ le prototype est obligatoire (et assimilé à la déclaration) on n'a pas ce probleme. D'ailleur en C++ seul les conversion T * -> void * sont valides, par conséquent NULL ne peut etre définie que de cette facon :
#define NULL 0 // pas standard
ce qui est tout juste bon à rendre le code plus lisible (c'est une histoire de gout).



Cette discussion est classée dans : double, pointeurs, pointeur, declarer, assigner


Répondre à ce message

Sujets en rapport avec ce message

Pointeurs [ par Nykkoo ] Salut,Etant debutant dans la programmation en C, j'arrive aux chapitres des pointeurs (sniff) et je me trouve confonté aux problemes suivants :double c++ pointeur pour debutant [ par blastmanu ] Bonjour a tous et a toutes !!!Voila je debute dans la programmation et en particulier C++ et je galere un peu avec les pointeurs, l "Comparaison" pointeur [ par LordBob ] Bonjour a tous,voila j'ai des petits problèmes avec une application et mes pointeurs... en fait je récupéren en début de programme l'adresse IP d'une double pointeur, récursivité dans les arbres binaires ordonnés [ par alfred289 ] pointeurs [ par djkill55 ] bonjour,j aimerai savoir cmt on fait un scanf sur une suite de pointeur, je m explike, je dois faire ca ms sans utiliser les [] , cad les tableux, ms pb pointeurs [ par Arnaud16022 ] bonsoirj'ai un peu de mal avec les pointeurs et ma fonction marche pas trop.Le but est de passer une variable en parametre a une fonction, qui va stoc double pointeur ? [ par Arkko ] que signifi le ** dansCCamera **CameraList; jai bcp de difficulté avec les pointeurs lol POINTEURS sur pointeurs [ par ledeveloppeurfou ] Voila je suis en train de construire une aplication pour une jeu de role, et je suis bloqué. Il me faudrait acceder à des pointeurs en employant de pr Utilisation d'un pointeur de fonction membre [ par cyrcocq ] Bonjour,J'ai déjà discuté de ça ailleurs, on m'a conseillé d'autres méthodes, mais imaginons une classe contenant un ensemble de fonction accessibles Pointeurs.Esque j'ai bien compri? [ par Oruk ] Bonjour ou bonsoir à tous.Je suis tou nouveau dans le monde du c++.J'ai donc un livre pour m'aider dans ma tache.Aujourd'hui j'arrive au chapitre du c


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales