« Discussion:Langage C++/Pointeur, Tableaux et références » : différence entre les versions
Contenu supprimé Contenu ajouté
Ligne 29 : | Ligne 29 : | ||
Il faudrait aussi rappeler qu'il est interdit de faire ce genre de magouille, car les adresses sortant de &a sont en terrain inconnu, on a strictement rien à y faire tant que l'on ne les a pas allouées. Ce serait le cas avec l'allocation d'un espace mémoire suffisant - comme l'exemple du tableau - à la place de a. Du coup ce code ne permet pas de créer un tableau, à la limite d'y accéder en utilisant l'adresse d'un tableau à la place de celle de la variable a. |
Il faudrait aussi rappeler qu'il est interdit de faire ce genre de magouille, car les adresses sortant de &a sont en terrain inconnu, on a strictement rien à y faire tant que l'on ne les a pas allouées. Ce serait le cas avec l'allocation d'un espace mémoire suffisant - comme l'exemple du tableau - à la place de a. Du coup ce code ne permet pas de créer un tableau, à la limite d'y accéder en utilisant l'adresse d'un tableau à la place de celle de la variable a. |
||
Mais je suis un peu fatigué là, alors si vous avez des commentaires, n'hésitez pas...--[[Utilisateur:Nestor Fish|Nestor Fish]] 22 août 2008 à 21:01 (UTC) |
Mais je suis un peu fatigué là, alors si vous avez des commentaires, n'hésitez pas...--[[Utilisateur:Nestor Fish|Nestor Fish]] 22 août 2008 à 21:01 (UTC) |
||
: C'est ce que j'ai essayé de dire dans le texte qui suit avec la validité des adresses. |
: C'est ce que j'ai essayé de dire dans le texte qui suit avec la validité des adresses. Apparemment pas assez efficacement. :) Ppignol 24 février 2011 à 02:13 (UTC) |
Version du 24 février 2011 à 02:13
Arithmétique des pointeurs
J'aimerais corriger l'exemple et modifier ses commentaires :
int a; // création de la variable int a en pile
int* p = &a; // création de la variable p pointeur sur int et affectation de l'adresse de a.
int* x = p++; // création de la variable x pointeur sur int, affectation de la valeur de p (x vaut &a), puis incrémentation de p
int* y = p; // création de la variable y pointeur sur int et affectation de la nouvelle valeur de p
int* z = ++p; // création de la variable z pointeur sur int, incrémentation de p et affectation de la nouvelle valeur de p
x = p--;
y = p;
z = --p;
// en décomposant
x = p; // (x vaut &a)
p = p + 1; // p étant un pointeur sur int, l'adresse qu'il contient sera incrémentée de 1 x sizeof(int), 4 octets si l'on est en 32 bit par exemple
y = p; // (y vaut &a + 4 octets)
p = p + 1;
z = p; // (z vaut &a + 8 octets)
x = p; // (x vaut &a + 8 octets)
p = p - 1;
y = p; // (y vaut &a + 4 octets)
p = p - 1;
z = p; // (z vaut &a)
La deuxième partie était erronée (pas d'incrémentation de p). Il faudrait aussi rappeler qu'il est interdit de faire ce genre de magouille, car les adresses sortant de &a sont en terrain inconnu, on a strictement rien à y faire tant que l'on ne les a pas allouées. Ce serait le cas avec l'allocation d'un espace mémoire suffisant - comme l'exemple du tableau - à la place de a. Du coup ce code ne permet pas de créer un tableau, à la limite d'y accéder en utilisant l'adresse d'un tableau à la place de celle de la variable a. Mais je suis un peu fatigué là, alors si vous avez des commentaires, n'hésitez pas...--Nestor Fish 22 août 2008 à 21:01 (UTC)
- C'est ce que j'ai essayé de dire dans le texte qui suit avec la validité des adresses. Apparemment pas assez efficacement. :) Ppignol 24 février 2011 à 02:13 (UTC)