C++ pointeur
Fermé
xman_genius
Messages postés
97
Date d'inscription
vendredi 14 octobre 2005
Statut
Membre
Dernière intervention
21 novembre 2006
-
6 janv. 2006 à 11:48
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 6 janv. 2006 à 23:22
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 6 janv. 2006 à 23:22
3 réponses
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
6 janv. 2006 à 15:35
6 janv. 2006 à 15:35
*p et *q c'est des pointeurs, pas des tableaux, donc forcément si tu fais des *(q+j)=*(p+i);
Tu accédes à des zones memoires imprevues.
Et ici:
p c'est déjà une adresse. Donc &p c'est l'adresse de p (l'adresse d'un pointeur). Donc &p + i c'est quelque part ou personne ne veut aller sinon un voyageur en quête d'aventure....
Sans compter que p et q doivent pointer vers des variables existantes ou bien vers un espace qui doit être alloué.
Tu accédes à des zones memoires imprevues.
Et ici:
scanf("%d\n",&p+i);
p c'est déjà une adresse. Donc &p c'est l'adresse de p (l'adresse d'un pointeur). Donc &p + i c'est quelque part ou personne ne veut aller sinon un voyageur en quête d'aventure....
Sans compter que p et q doivent pointer vers des variables existantes ou bien vers un espace qui doit être alloué.
xman_genius
Messages postés
97
Date d'inscription
vendredi 14 octobre 2005
Statut
Membre
Dernière intervention
21 novembre 2006
21
6 janv. 2006 à 21:28
6 janv. 2006 à 21:28
pour *(q+j)=*(p+i); *(q+j) et *(p+i) sont des contenus de memoire et pas des @memoire
alors que pour scanf("%d\n",&p+i); on peut le faire ca marche mais le compilateur ce plante a l'affectation donc au 2eme boucle
merci de ton aide ;)
alors que pour scanf("%d\n",&p+i); on peut le faire ca marche mais le compilateur ce plante a l'affectation donc au 2eme boucle
merci de ton aide ;)
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
6 janv. 2006 à 23:22
6 janv. 2006 à 23:22
Si tu déclare un pointeur
int *q;
Tu ne pas juste après faire par exemple
*q=1;
Car q ne pointe sur rien pour l'instant. Tu peux le faire pointer vers une variable existante ou vers un espace memoire alloué.
*(q+j)=*(p+i); je suis d'accord ce sont des contenus memoires (enfin ça l'aurait été si q et p pointaient vers quelquechose de concret). Mais pour l'instant ils ne pointent sur rien.
q ne pointe sur rien. Donc q+9 ne pointe pas non plus dans un espace memoire valide (ou du moins pas celui que tu aurais voulu).
int *q;
Tu ne pas juste après faire par exemple
*q=1;
Car q ne pointe sur rien pour l'instant. Tu peux le faire pointer vers une variable existante ou vers un espace memoire alloué.
*(q+j)=*(p+i); je suis d'accord ce sont des contenus memoires (enfin ça l'aurait été si q et p pointaient vers quelquechose de concret). Mais pour l'instant ils ne pointent sur rien.
q ne pointe sur rien. Donc q+9 ne pointe pas non plus dans un espace memoire valide (ou du moins pas celui que tu aurais voulu).