Bonjour,
'aimerais bien savoir pourquoi dans le cas suivant:
merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int *ptr = 5; /* ptr contient la valeur 5 */ *ptr = 10; /* ptr contient toujours 5*/
Bonjour,
'aimerais bien savoir pourquoi dans le cas suivant:
merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int *ptr = 5; /* ptr contient la valeur 5 */ *ptr = 10; /* ptr contient toujours 5*/
Je suppose que la question qui manque, c'est "Pourquoi cela crash ?".
C'est bon, je suppose juste que le compilateur doit émettre un warning ou une erreur, il faudrait caster un peu
Code : Sélectionner tout - Visualiser dans une fenêtre à part int *ptr = 5; /* ptr contient la valeur 5 */
Code : Sélectionner tout - Visualiser dans une fenêtre à part int *ptr = (int *)5; /* ptr contient la valeur 5 */Ce code ne fait pas ce que tu penses. Il met à l'adresse pointée par ptr (c'est à dire 5) la valeur 10. Cela ne modifie absolument pas la valeur de ptr, cela modifie la valeur de la mémoire pointée par ptr.
Code : Sélectionner tout - Visualiser dans une fenêtre à part *ptr = 10; /* ptr contient toujours 5*/
Par contre, il est fort probable que tu n'as pas le droit d'écrire à cette adresse et cela devrait générer une erreur à l'exécution.
Un exercice de base sur les pointeurs. Si tu comprends ça, tu auras TOUT compris sur les pointeurs.
A savoir : un pointeur est une variable qui retourne l'adresse mémoire d'une autre variable. Pour connaitre la valeur de cette adresse mémoire, tu fais *p, pour avoir l'adresse de x tu fais &x
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int x = 3; int * p = &x; /* donc *p == 3, p est un pointeur qui pointe vers l'adresse memore de x */ *p = 7; /* x == 7 : comprend par là : *p est l'objet qui est pointé par p (donc x) et tu "mets" 7 dans cette case mémoire) */
C'est parce que ça correspond à ceci:
Là, on voit mieux la différence.
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int *ptr; ptr = 5; *ptr = 10;
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Partager