« Discussion:Langage C++/Constantes et Variables » : différence entre les versions
Contenu supprimé Contenu ajouté
Aucun résumé des modifications |
|||
Ligne 22 : | Ligne 22 : | ||
:exact merci. Ppignol 22 février 2011 à 13:53 (UTC) |
:exact merci. Ppignol 22 février 2011 à 13:53 (UTC) |
||
== Arithmétique des pointeurs == |
|||
J'aimerais corriger l'exemple et modifier ses commentaires : |
|||
<source lang="cpp"> |
|||
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) |
|||
</source> |
|||
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...--[[Utilisateur:Nestor Fish|Nestor Fish]] 22 août 2008 à 21:01 (UTC) |
Version du 22 février 2011 à 14:01
"Le Casting sans caméras" ?? je ne comprends pas cette expression. Ne serait-il pas plus judicieux de parler des static_cast, dynamic_cast et const_cast plutot que de celui présenté qui se réfère d'avantage au C ?
Essayez de faire l'un de vos cast la dessus pour voir :
double a = 0.0;
void* p = &a;
*(double*)p = 1.234;
Je cherche à simplifier pas à compliquer. J'en parlerais dans le chapitre des templates.
Pile et éléments
Bonjour, je me suis permis de corriger les définitions de LSB et MSB, qui concernent des octets et non pas des bits dans le cadre de la pile.--Nestor Fish 22 août 2008 à 19:30 (UTC)
- exact merci. Ppignol 22 février 2011 à 13:53 (UTC)