Bonsoir,
Je me posais une petite question, est-ce qu'un pointeur sur NULL prend une quelconque place en mémoire, ou alors strictement rien du tout ?
Merci
Bonsoir,
Je me posais une petite question, est-ce qu'un pointeur sur NULL prend une quelconque place en mémoire, ou alors strictement rien du tout ?
Merci
ça veut rien dire... un pointeur pointe sur une zone mémoire, ce qui prend de la place c'est la zone allouée, pas le pointeur. Que tu le fasse pointer vers NULL ou une zone réellement allouée, ça change rien.
Ouais le pointeur n'occupera pas plus ou moins d'espace si tu changes la variable pointée. L'espace occupé correspond à l'espace requis pour identifier une adresse mémoire.
Tu peux connaître la taille d'un pointeur grâce à un sizeof.
J'obtiens une taille de 32 bits quelque soit la variable pointée.
Tu peux faire le test grâce à ce programme:
Et j'obtiens:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #include <iostream> using namespace std; int main() { int* pointeur = NULL; cout << "pointeur = NULL: " << sizeof(pointeur)*8 << "bits" << endl; int a=3; pointeur = &a; cout << "pointeur = &a: " << sizeof(pointeur)*8 << "bits" << endl; double b = 5.56; double* pointeur2 = &b; cout << "pointeur sur double: " << sizeof(pointeur2)*8 << "bits" << endl; return 0; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 pointeur = NULL: 32bits pointeur = &a: 32bits pointeur sur double: 32bits
sizeof est une constante de compilation, qui ne dépend pas de la valeur de son argument, juste de son type. En fait l'argument de sizeof n'est pas évalué. On peut donc faire sizeof une variable non-initialisée (très courant) :
On pourrait même faire des choses "interdites" dans sizeof :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int i; cout << i ; // NON! comportement indéfini! cout << sizeof i; // OK
Code : Sélectionner tout - Visualiser dans une fenêtre à part cout << sizeof (*(int*)0); // équivaut à sizeof (int)
Et c'est d'ailleurs parce qu'il est évalué à la compilation qu'on le retrouve souvent dans des techniques de métaprogrammation.
Excusez moi de changer de sujet mais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part cout << i ; // NON! comportement indéfini!
?
Pourquoi?
Partager