Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/03/2013, à 16:30

max02100

les pointeurs en C

Bonjour à tous je suis en pleine revision d'exam de L3 informatique et les pointeurs ne m'aiment pas beaucoup j'ai compris le principe mais sur des questions je ne comprends pas du tout .
Par exemple

#define N 10
int tab[N] = {1,2,3,4,5,6,7,8,9,10};
int *p = &tab[0], *q = &tab[N-1], temp;
while(p<q){
     temp = *p;
     *(p++) = *q;
     *(q--) = temp;
}

Alors je comprends que dans le while p et q sont sont les valeurs dans les tabs (donc au 1er tour p=1 et q=10) mais alors dans le while je suis perdu.
Je vous remercie d'avance pour votre aide amis linuxiens

Dernière modification par max02100 (Le 04/03/2013, à 17:10)

Hors ligne

#2 Le 04/03/2013, à 16:44

Braun

Re : les pointeurs en C

Bonjour,
Je lis peut être trop vite mais ne comprends pas ton histoire de "p" et de "q", pourquoi l'un a droit à une  esperluette et pas l'autre?

Hors ligne

#3 Le 04/03/2013, à 16:48

pingouinux

Re : les pointeurs en C

Bonjour,
q est mal initialisé. C'est :

int *p = &tab[0], *q = &tab[N-1], temp;

ou

int *p = tab, *q = tab+N-1, temp;

p pointe initialement sur le premier élément du tableau, q sur le dernier. Ces 2 pointeurs se déplacent ensuite l'un vers l'autre. À chaque étape, on échange les 2 éléments pointés par p et q. À la fin, le tableau est inversé.

Hors ligne

#4 Le 04/03/2013, à 17:08

:!pakman

Re : les pointeurs en C

SI on reprend ligne par ligne...

Ici, tu déclares un tableau de 10 cases :

#define N 10
int tab[N] = {1,2,3,4,5,6,7,8,9,10};

tab, comme tous tableaux C, désigne un pointeur vers la 1ere case du tableau (d'indice 0). Ce que tu fais ligne 3 peut être simplifié.

int *p = &tab[0];
// ...ce que tu fais juste au dessus est équivalent à...
int *p = tab;

Tu déclares également un autre pointeur, q, qui lui me semble mal initialisé (pas d'esperluette, tu récupères donc une valeur et pas une adresse). Or, q est un pointeur, il lui faut une adresse...

Dans le while, p et q ne sont pas les valeurs dans le tableau, p et q sont des adresses. *p et *q, par contre, désignent les valeurs pointées par les adresses p et q.

Quand tu fait :

*(p++) = *q;

Tu incrémente p (tu pointes vers la case suivante), tu récupères la valeur et tu la stocke dans dans la case pointée par q.

Edit : grillé et re grillé tongue

Dernière modification par :!pakman (Le 04/03/2013, à 17:09)


...

Hors ligne

#5 Le 04/03/2013, à 17:11

max02100

Re : les pointeurs en C

en effet c'est corrigé q a son & big_smile

Hors ligne