Contenu | Rechercher | Menus

Annonce

Ubuntu-fr.org recrute toujours de nouveaux modérateurs, avec de l'expérience.

Ubuntu 16.04 LTS
Réservez vos DVD et clé USB Ubuntu-fr (premières livraisons mi-mai)

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

M.A.J. en cours du forum possibilité de bug, nous faisons le maximum pour les résoudre au plus vite

#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