🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fr.comp.lang.c
Article #15063

Re: interet des pointeurs en C

#15063
From: Richard Delorme
Date: Sun, 16 Oct 2005 13:03
96 lines
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-mail
References: <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