Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

#1 Le 04/03/2013, à 17: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, à 18:10)

Hors ligne

#2 Le 04/03/2013, à 17: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, à 17: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, à 18: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, à 18:09)


...

Hors ligne

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

max02100

Re : les pointeurs en C

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

Hors ligne

Haut de page ↑