Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3193 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [c++] signification du NULL ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c++] signification du NULL ?

n°350269
Umer
Posté le 02-04-2003 à 15:46:03  profilanswer
 

à quoi sert le nul, par exemple dans une boucle  

Citation :


if(i==NULL){..}

mood
Publicité
Posté le 02-04-2003 à 15:46:03  profilanswer
 

n°350270
chrisbk
-
Posté le 02-04-2003 à 15:46:57  profilanswer
 

#define NULL 0

n°350271
Umer
Posté le 02-04-2003 à 15:49:10  profilanswer
 

ok merci

n°350274
theshockwa​ve
I work at a firm named Koslow
Posté le 02-04-2003 à 15:59:04  profilanswer
 

chrisbk a écrit :

#define NULL 0
 


 
:heink:
 
Si tu fais ca texto, il me semble que ca ne marche pas avec tous les compilos ... (Visual fait la gueule ... :D)
 
Mais dans le principe, c'est vrai que c'est 0


---------------
last.fm
n°350281
Umer
Posté le 02-04-2003 à 16:07:22  profilanswer
 

g++ fait aussi la gueule, en fait je crois que NULL vaut par defaut la valeur 0, j'ai bon ?

n°350282
chrisbk
-
Posté le 02-04-2003 à 16:07:45  profilanswer
 

theShOcKwAvE a écrit :


 
:heink:
 
Si tu fais ca texto, il me semble que ca ne marche pas avec tous les compilos ... (Visual fait la gueule ... :D)
 
Mais dans le principe, c'est vrai que c'est 0


 
ouais pe au niveau des conversions de pointeur, mais bon, c t pour l'idee :D

n°350283
Umer
Posté le 02-04-2003 à 16:08:13  profilanswer
 

donc pas besoin du #define

n°350285
chrisbk
-
Posté le 02-04-2003 à 16:09:16  profilanswer
 

?
 
ben non, c t juste pour te donner une idee de ce qu'est null !

n°350287
theshockwa​ve
I work at a firm named Koslow
Posté le 02-04-2003 à 16:12:14  profilanswer
 

Oups ... Désolé ... Je crois que je sème la confusion avec mes remarques à 2 balles ...
 
Oauis ... NULL, c'est 0 ... Que tu compares à NULL ou que tu compares à 0, ca devrait revenir au même partout. Simplement, NULL est plus parlant pour ceux qui te reliront.
 
NULL signifie que tu pointes sur une zone mémoire factice, qui ne peut pas (et ne DOIT surtout pas) être utilisée pour lire ou écrire des valeurs


---------------
last.fm
n°350290
theshockwa​ve
I work at a firm named Koslow
Posté le 02-04-2003 à 16:13:53  profilanswer
 

chrisbk a écrit :


 
ouais pe au niveau des conversions de pointeur, mais bon, c t pour l'idee :D
 


 
Quand je débutais, on m'avait dit que c'était :
#define NULL (void *)0
 
Et ca foire aussi ... Pourquoi tout le monde nous ment quand on débute ? :lol:
 
 
Edit : correction faute d'orthographe ... :D


Message édité par theshockwave le 02-04-2003 à 16:14:40

---------------
last.fm
mood
Publicité
Posté le 02-04-2003 à 16:13:53  profilanswer
 

n°350383
Taz
bisounours-codeur
Posté le 02-04-2003 à 17:20:58  profilanswer
 

theShOcKwAvE a écrit :


 
:heink:
 
Si tu fais ca texto, il me semble que ca ne marche pas avec tous les compilos ... (Visual fait la gueule ... :D)
 
Mais dans le principe, c'est vrai que c'est 0

c pire que le principe, c'est la définition canonique

n°350407
theshockwa​ve
I work at a firm named Koslow
Posté le 02-04-2003 à 17:30:20  profilanswer
 

++Taz a écrit :

c pire que le principe, c'est la définition canonique


 
Oups ... Un gros désolé et de plates excuses à tout le monde ...
 
 
En fait,
#ifdef NULL
#undef NULL
#endif
#define NULL 0
 
 
ca marche ... :(
 
J'sais pas ce que j'avais foutu le jour où ca n'a pas marché ...
 
(Edit ... Correction smiley ...)


Message édité par theshockwave le 02-04-2003 à 17:31:16

---------------
last.fm
n°350442
Taz
bisounours-codeur
Posté le 02-04-2003 à 18:30:09  profilanswer
 

de toutes façon en C++, je mets un jpli 0 et voilà

n°350569
Umer
Posté le 02-04-2003 à 21:17:08  profilanswer
 

un jpli taz ?? c quoi stp ?

n°350586
wave
Posté le 02-04-2003 à 21:39:49  profilanswer
 

++Taz a écrit :

de toutes façon en C++, je mets un jpli 0 et voilà


:jap:
j'aime bien savoir ce qui se passe et quand je veux un zero j'écris pas autrechose:D
de toutes façons le jour où j'écrirai du code en C/C++ sur une machine où on a le droit d'allouer à l'adresse 0...

n°350594
Taz
bisounours-codeur
Posté le 02-04-2003 à 21:55:38  profilanswer
 

tu crois quoi? que 0 représente un mot mémoire spécial? etc, que la valeur de pointeur est une vrai adresse en RAM? ce n'est pas le cas. encore une fois, le 0 est une définition canonique. n'importe quel environnment C++ le respecte .|

n°350800
wave
Posté le 03-04-2003 à 00:46:34  profilanswer
 

++Taz a écrit :

tu crois quoi? que 0 représente un mot mémoire spécial? etc, que la valeur de pointeur est une vrai adresse en RAM? ce n'est pas le cas. encore une fois, le 0 est une définition canonique. n'importe quel environnment C++ le respecte .|


sur amiga j'ai déjà stocké un mot long (32 bits) à l'adresse 0:D
le C/C++, quand on met un zero dans un pointeur, n'empêche pas d'y accéder comme si c'était une autre valeur. Simplement sur la plupart des OS, on se fait jeter par la protection mémoire.
Ce que je veux dire, c'est que dans un environnement où l'adresse 0 est utilisable (rare), on aurait intérêt à ce que NULL ait une autre valeur qui ne peut pas exister comme pointeur. Mais à priori ça risque pas d'arriver donc autant mettre 0 à la place de NULL, c'est + lisible.


Message édité par wave le 03-04-2003 à 00:48:48
n°350878
Taz
bisounours-codeur
Posté le 03-04-2003 à 07:28:17  profilanswer
 

++Taz a écrit :

ce n'est pas le cas. encore une fois, le 0 est une définition canonique. n'importe quel environnment C++ le respecte .|

n°350880
drasche
Posté le 03-04-2003 à 07:35:07  profilanswer
 

wave a écrit :


Simplement sur la plupart des OS, on se fait jeter par la protection mémoire.


encore heureux :o
 
sur x86/MSDOS c'est la table des interruptions à cette adresse.  Seulement je sais pas si c'est spécifique à l'OS ou à la plate-forme x86 [:meganne]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°351959
wave
Posté le 03-04-2003 à 18:44:40  profilanswer
 

++Taz a écrit :

encore une fois, le 0 est une définition canonique. n'importe quel environnment C++ le respecte .|


je sais pas ce que tu entends par 'canonique'.
mais sur une machine sans mémoire virtuelle, où les pointeurs représentent l'adresse réelle, un pointeur à 0 pointera sur l'adresse physique 0.

n°352213
LeGreg
Posté le 04-04-2003 à 06:09:39  profilanswer
 

wave a écrit :


je sais pas ce que tu entends par 'canonique'.
mais sur une machine sans mémoire virtuelle, où les pointeurs représentent l'adresse réelle, un pointeur à 0 pointera sur l'adresse physique 0.


 
oui mais malheureusement il n'est pas requis que l'adresse pointée par le pointeur "null" soit une adresse invalide, de même qu'il n'est pas requis que le système trappe les déférencements de pointeurs "null".
Par contre il est requis par le C++ que l'assignement du litteral "zero (0)" à un pointeur, soit considéré comme une initialisation à "null" et que toute comparaison ultérieur de ce pointeur au littéral "zero (0)" retourne true.
 
LeGreg


---------------
voxel terrain render engine | animation mentor
n°353213
wave
Posté le 04-04-2003 à 17:56:12  profilanswer
 

legreg a écrit :


 
oui mais malheureusement il n'est pas requis que l'adresse pointée par le pointeur "null" soit une adresse invalide, de même qu'il n'est pas requis que le système trappe les déférencements de pointeurs "null".
Par contre il est requis par le C++ que l'assignement du litteral "zero (0)" à un pointeur, soit considéré comme une initialisation à "null" et que toute comparaison ultérieur de ce pointeur au littéral "zero (0)" retourne true.
 
LeGreg


encore heureux qu'un 0==0 retourne 'true' :D

n°353217
bjone
Insert booze to continue
Posté le 04-04-2003 à 18:02:18  profilanswer
 

est dans le cas d'un pointeur far en mode protégé ?
avec segment::offset en 16:32 bits, si on fait ptr=NULL, ça doit mettre que l'offset à 0 non ?

n°353226
wave
Posté le 04-04-2003 à 18:19:08  profilanswer
 

BJOne a écrit :

est dans le cas d'un pointeur far en mode protégé ?
avec segment::offset en 16:32 bits, si on fait ptr=NULL, ça doit mettre que l'offset à 0 non ?


je sais pas comment ça marche (j'ai pas touché au PC avant que cette mauvaise période soit finie:D).
dans ce mode t'arrives à allouer un bloc de + de 64Ko?
si oui, on peut supposer que le compilo gère pas seulement l'offset, sinon ça doit être juste l'offset.
tu peux tenter un sizeof sur le pointeur, ça peut donner un indice.

n°353638
bjone
Insert booze to continue
Posté le 05-04-2003 à 17:20:39  profilanswer
 

nan, je parles pas du mode réel...
 
sous windows, tu peux très bien (enfin il me semble fo demander au kernel) avoir plusieurs segments de donnée, et donc maintenir tes objets par un pointeur far (16:32).

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [c++] signification du NULL ?

 

Sujets relatifs
[SGBD] Difference entre "" et NULL [MAJ Informix][Java] Session à null à cause d'un proxy
[mysql] Laisser une valeur null par défaut ou non?Castage de NULL
[SQL] Comment dire "si null, retourne 0" dans un select ??Signification d'un warning
[SQL] Additionné plusieurs champs numériques dont un est NULL ?probleme avec une variable NULL (en access)
[C-C++] streams - équivalent de /dev/null pour win32[JavaScript] demande de signification de codage ...
Plus de sujets relatifs à : [c++] signification du NULL ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR