Bonjour,
'aimerais bien savoir pourquoi dans le cas suivant:
merciCode:
1
2
3 int *ptr = 5; /* ptr contient la valeur 5 */ *ptr = 10; /* ptr contient toujours 5*/
Version imprimable
Bonjour,
'aimerais bien savoir pourquoi dans le cas suivant:
merciCode:
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 peuCode:int *ptr = 5; /* ptr contient la valeur 5 */
Code: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:*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 &xCode:
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) */