Citation :
int* i;
est-il possible d'écrire
(*i) = 10;
pour que l'int pointé par i soit égal à 10 ?
|
On t'as déjà répondu que oui, mais je rajoute:
Si p est un pointeur, *p est l'objet pointé, avec toutes ses propriétés et ses possibilités.
Code :
- *p= 0; //écrire dans un entier
- (*p).mem ;//accéder au membre d'une structure
- (*p)() ; //appeler une fonction
- (*p)[n] ; //indicer un tableau
- &(*p) ; //la même adresse que dans le pointeur
|
Ce principe de pouvoir intact est important, car il s'applique à toutes les constructions du C, et permet d'aller asser loin:
Code :
- a[i](); //appel d'un pointeur de fonction issu d'un tableau.
- f().ma[i]; //indicer un tableau membre d'une structure renvoyée par une fonction
- (t ? f1 : f2)() ; //appel d'une fonction différente selon t
- (*(t ? &i : &j))++ ; //incrémenter i (t vrai) ou j (t faux)
|
On peut faire pire... il n'y a pas de limite de taille.
Citation :
int* i;
int j;
si jms l'écriture du dessus est juste :
(*i) = 10;
donc est-il possible d'écrire :
(&j) = i;
pour que i et j pointent vers le mm nombre ?
|
Non.
L'adresse d'un objet/variable n'est pas une variable (lvalue) mais une valeur (rvalue).
lvalue fait référence au fait que l'objet peut apparaître à gauche (Left) du signe "=", sans considérer l'éventuelle constance.
rvalue est l'opposé: une valeur, et on ne peut pas changer la valeur d'une valeur, seulement générer une autre valeur.
Typiquement, on peut prendre l'adresse d'une rvalue (son stockage), pas d'une valeur.
En fait, C se contente d'évaluer les expressions, il ne peut pas faire le chemin inverse de choisir les termes de l'expression pour que le résultat soit bon.
La différence entre le pas-à-pas du programmeur et l'équation du mathématiciens...
---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone