Aller au contenu

C pointeurs/Tableau de double pointeur

Leçons de niveau 14
Une page de Wikiversité, la communauté pédagogique libre.
Début de la boite de navigation du chapitre
Tableau de double pointeur
Icône de la faculté
Chapitre no 8
Leçon : C pointeurs
Chap. préc. :Double pointeur de double 3
Chap. suiv. :Matrices complexes
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « C pointeurs : Tableau de double pointeur
C pointeurs/Tableau de double pointeur
 », n'a pu être restituée correctement ci-dessus.


  • Pour approfondir ce travail : "Mathc".
  • Des tableaux de matrices permet de travailler avec des boucles.
  • Le premier exemple montre la méthode.
  • Le second exemple automatise le travail (boucle for).
  • Le troisième exemple nous montre qu’il n'y a aucune raison que les matrices soient toutes de tailles identiques.


  • Il faut utiliser la librairied'algèbre linéaire (n_1aa.zip).
  • Indispensable pour tester les exemples de cette page.
  • Le deuxième fichier n_1ab.zip donne des exemples sur les tableaux de matrices réelles et complexes.


Premier exemple

[modifier | modifier le wikicode]
  • On créé un tableau de double pointeur fixe (double **A[3];)
  • On fait pointer chaque élément du tableau sur une matrice.
  • Ne pas oublier de libérer chaque élément du tableau.
/* ------------------------------------ */
#include "v_a.h"
/* ------------------------------------ */
int main(void)
{
double **A[3];
time_t t;

  srand(time(&t));

int r = rp_I(5);
int c = rp_I(5);

     A[0] = r_mR(i_mR(r,c),9);
     A[1] = r_mR(i_mR(r,c),9);
     A[2] =      i_mR(r,c);


  printf(" A0 : ");
  p_mR(A[0],5,0,C6);

  printf(" A1 : ");
  p_mR(A[1],5,0,C6);

  add_mR(A[0],A[1],A[2]);

  printf(" A0plsA1 : ");
  p_mR(A[2],5,0,C6);

  f_mR(A[0]);
  f_mR(A[1]);
  f_mR(A[2]);

  printf(" Press return to continue \n");


  getchar();
  return 0;
}


Deuxième exemple

[modifier | modifier le wikicode]
  • L'intérêt des tableaux est d’utiliser une boucle.
  • Ici on initialise et on détruit le tableau dans une boucle for.
  • J’ai choisi de soulager la fonction main() en portant le maximum dans i_mR_An()
/* ------------------------------------ */
#include "v_a.h"
/* ---------------------------------------------------  */
/* Initialisation d'un tableau de double pointeurs      */
/* Cette fonction dépend de la feuille de travail       */
/* Ici on veut des matrices de tailles alétoires [1..5] */
/* Initialiser avec des valeurs aléatoire [-9..9]       */
/* Ce travail est effectué ici pour soulager main()     */
/* ---------------------------------------------------  */
void i_mR_An(
double **A[],
int n
)
{
int i = 0;

int r = rp_I(5);
int c = rp_I(5);

  for(;i<n;i++) A[i] = r_mR(i_mR(r,c),9);
}
/* ------------------------------------ */
void f_mR_An(
double **A[],
int n
)
{
int i=0;

  for(;i<n;i++)f_mR(A[i]);
}
/* ------------------------------------ */
int main(void)
{
double **A[3];
int i=0;

time_t t;

  srand(time(&t));

  i_mR_An(A,3);

  add_mR(A[0],A[1],A[2]);

  for(;i<3;)
      {
       printf(" A%d : ",i);
         p_mR(A[i++],5,0,C6);
      }

  f_mR_An(A,3);

  printf(" Press return to continue \n");

  getchar();
  return 0;
}

Troisième exemple

[modifier | modifier le wikicode]
  • Le tableau à 100 matrices de tailles différentes.
  • Ne pas oublier de libérer chaque élément du tableau.
/* ------------------------------------ */
#include "v_a.h"
/* ---------------------------------------------------  */
/* Initialisation d'un tableau de double pointeurs      */
/* Cette fonction dépend de la feuille de travail       */
/* Ici on veut des matrices de tailles alétoires [1..5] */
/* Initialiser avec des valeurs aléatoire [-9..9]       */
/*                                                      */
/*     LES MATRICES NON PAS TOUTES LA MEME TAILLE       */
/* ---------------------------------------------------  */
void i_mR_An(
double **A[],
int n
)
{
int i = 0;

  for(;i<n;i++) A[i] = r_mR(i_mR(rp_I(5),rp_I(5)),9);
}
/* ------------------------------------ */
void f_mR_An(
double **A[],
int n
)
{
int i=0;

  for(;i<n;i++)f_mR(A[i]);
}
/* ------------------------------------ */
int main(void)
{
double **A[100];
int i=0;

time_t t;

  srand(time(&t));

  i_mR_An(A,100);

  for(;i<100;)
      {
       printf(" A%d : ",i);
         p_mR(A[i++],5,0,C6);
      }

  f_mR_An(A,100);

  printf(" Press return to continue \n");

  getchar();
  return 0;
}