Article View: fr.comp.lang.c
Article #15063Re: interet des pointeurs en C
From: Richard Delorme
Date: Sun, 16 Oct 2005 13:03
Date: Sun, 16 Oct 2005 13:03
96 lines
3754 bytes
3754 bytes
Thierry B a �crit :
> Bonjour,
> Je voulais savoir si quelqu'un pouvait me citer des exemples o� le
> fait d'utiliser des pointeurs en C est bien utile et plus rapide, par
> rapport � une structure sans pointeurs?
>
> Car en fait, pour l'instant, je les manipule dans des structures de
> tableaux, et donc je vois pas trop leur interet, et ce que ca peut
> amener de pratique.
Si tu appelles tableau quelque chose comme :
int t[42];
utiliser un pointeur � la place permet une meilleure gestion de la m�moire :
int *t = malloc (42 * sizeof *t);
/* ... */
t = free(t);
t = malloc(143 * sizeof *t);
/* ... */
Au d�but, je peux stocker 42 entiers, et ensuite 143, bref avec les
pointeurs j'ai un tableau redimensionnable.
Maintenant conceptuellement, les deux sont des tableaux, c'est � dire
des espaces de stockages o� les �l�ments sont rang�es de mani�res
contigu�s et successives. Pour stocker certaines choses un tel tableau
n'est pas pratique ; si l'on a souvent besoin d'ins�rer ou d'�ter un
�l�ment, par exemple :
/*
* insere un element � la i�me place d'un tableau de n �l�ments
*/
void tab_insere(int t[], int n, int i, int data)
{
int j;
for (j = n + 1; j > i; j--) {
t[j] = t[j - 1];
}
t[i] = data;
}
/*
* supprime un element � la i�me place d'un tableau de n �l�ments
*/
void tab_supprime(int t[], int n, int i)
{
int j;
for (j = i; j < n - 1; j++) {
t[j] = t[j + 1];
}
}
Dans les deux cas, on est oblig� de d�placer un nombre d'�l�ments qui
peut �tre important, ce qui n'est pas tr�s efficace.
Avec les pointeurs, il est +/- facile de cr�er une liste doublement
chain�e, pour laquelle l'insertion et la suppression d'un �l�ment est
plus rapide :
struct Element {
int data;
struct Element *suivant;
struct Element *precedent;
};
/*
* ins�re un �l�ment i apres l'�l�ment e
*/
void list_insere(struct Element *e, struct Element *i) {
i->precedent = e;
i->suivant = e->suivant;
i->suivant->precedent = i;
i->precedent->suivant = i;
}
/*
* supprime un �l�ment i
*/
void list_supprime(struct Element *i) {
i->precedent->suivant = i->suivant;
i->suivant->precedent = i->precedent;
}
L� la vitesse est constante, et relativement faible, ind�pendamment de
la taille des listes.
Voil�, c'est juste un exemple o� l'utilisation de pointeurs permet de
construire des structures de stockage plus efficace qu'un tableau. Les
pointeurs permettent de faire pleins d'autres choses int�ressantes.
--
Richard
Technical Details
Message-ID:
<43524f86$0$456$7a628cd7@news.club-internet.fr>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!proxad.net!proxad.net!m.t-online.fr!v.t-online.fr!t-online.fr!not-for-mailReferences:
<1129462936.795672.303050@z14g2000cwz.googlegroups.com>Show Full Headers
Complete Article Headers
X-Google-Thread: f9822,db5bbe1814b1a534 X-Google-Attributes: gidf9822,public X-Google-Language: FRENCH,ASCII Path: arc1-ca.pugleaf.net!g2news1.google.com!news2.google.com!proxad.net!proxad.net!m.t-online.fr!v.t-online.fr!t-online.fr!not-for-mail Date: Sun, 16 Oct 2005 15:03:05 +0200 From: Richard Delorme <abulmo@nospam.fr> User-Agent: Mozilla Thunderbird 1.0.6 (X11/20050801) X-Accept-Language: fr, en MIME-Version: 1.0 Newsgroups: fr.comp.lang.c Subject: Re: interet des pointeurs en C References: <1129462936.795672.303050@z14g2000cwz.googlegroups.com> In-Reply-To: <1129462936.795672.303050@z14g2000cwz.googlegroups.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit Lines: 96 Message-ID: <43524f86$0$456$7a628cd7@news.club-internet.fr> Organization: Club-Internet / T-Online France NNTP-Posting-Date: 16 Oct 2005 13:03:03 GMT NNTP-Posting-Host: 62.34.206.155 X-Trace: 1129467783 news.club-internet.fr 456 62.34.206.155 X-Complaints-To: abuse@club-internet.fr