Bonjour,
Comme vous vous en rendez compte, je suis débutant en c++
Je me pose la question suivante : pourquoi n'est-il pas possible d'écrire:
?Code:
1
2 char a = 'z'; int *pointeur = &a;
Merci pour vos réponses
Version imprimable
Bonjour,
Comme vous vous en rendez compte, je suis débutant en c++
Je me pose la question suivante : pourquoi n'est-il pas possible d'écrire:
?Code:
1
2 char a = 'z'; int *pointeur = &a;
Merci pour vos réponses
Bonjour,
a est un char, donc pour pouvoir pointer sur a il faut un pointeur sur char.
Un pointeur sur un int, ça va permettre d'accéder quelque qui est un int.
merci bien. Mais je pensais que le contenu d'un pointeur étant une adresse, donc un nombre, c'était toujours du int ou du long.
C'est le cas :mrgreen: 1 adresse est 1 nombre. Mais
- On dit vers quoi on pointe : char*, my_struct*, FILE*
- depuis la norme C99, et l'arrivée des processeurs 64 bits, il y a les types intptr_t et uintptr_t pour contenir 1 pointeur. Parce que si tu utilises l'opérateur sizeof sur 1 pointeur, il te retournera soit 4 octets (pour du 32 bits) soit 8 octets (pour du 64 bits). C'est lié qu'1 processeur de X bits peut allouer 2^X de mémoire (la fameuse limite de 4 Go des systèmes d'exploitation 32 bits :whistle:)
Ensuite, cela c'est juste le début :mrgreen: :
- parce 1 adresse c'est aussi le début de quelque chose - d'1 tableau, de ta structure
- tu as justement l’arithmétique des pointeurs
- les dangling pointeurs
- 1 tableau passé en paramètre est dégradé en pointeur (et donc tu perds la taille)
- ...
- la généricité avec void*
ok, merci pour ces réponses mais alors comment j'obtiens l'adresse de char a avec un char *pointeur?
Simplement avec 1 affectation :mrgreen:
Code:
1
2
3
4
5
6
7 char a = 'z'; char* p_a = &a; char* p_b = p_a; char* p_c = NULL; printf("%c at adresse %p - %lu bits (p_a: %p, p_b: %p, p_c: %p)\n", a, &a, sizeof(p_a), p_a, p_b, p_c);
ok, merci pour vos réponses