/* Université Paris-Dauphine - GMI2       */
/* Mise à Niveau informatique - 2004-2005 */
/* Maude Manouvrier                       */

#include <stdio.h>

/* définition dy type pointeur sur un tableau de 10 entiers (la définition de ce type est utile pour le malloc) */
typedef int (*type_pointeur_sur_tableau)[10]; 

int main()
{
  /* déclaration d'un tableau de 10 pointeurs sur entier */
  int *tableau_de_pointeurs[10];
  /* déclaration d'un pointeur sur un tableau de 10 entiers */
  type_pointeur_sur_tableau pointeur_sur_tableau;

  int iCompteur=0;

  /* déclaration et initialisation d'un tableau de 10 entiers */
  int iTab[10]={1,5,8,49,5,6,7,3,-1,5};

  /* tableau_de_pointeurs est un tableau statique donc inutile d'allouer de la memoire pour le tableau (c'est déjà fait!) mais il faut allouer de la mémoire pour chaque pointeur du tableau */
  for(iCompteur=0; iCompteur<10;iCompteur++)
    tableau_de_pointeurs[iCompteur]=(int*)malloc(sizeof(int));

  /* Affectation d'une valeur à chaque élément du tableau */
   for(iCompteur=0; iCompteur<10;iCompteur++)
    *(tableau_de_pointeurs[iCompteur])=iCompteur;

   printf("Affichage des éléments du tableau de pointeurs\n");
   /* Affichage des éléments du tableau */
  for(iCompteur=0; iCompteur<10;iCompteur++)
    printf("le %d element du tableau a pour valeur : %d \n",iCompteur,*(tableau_de_pointeurs[iCompteur]));

  /* Au lieu d'appeler malloc on peut donner à chaque pointeur l'adresse d'un élément du tableau */
   for(iCompteur=0; iCompteur<10;iCompteur++)
     tableau_de_pointeurs[iCompteur]=&iTab[iCompteur];
   
  printf("\nAutre affichage des éléments du tableau de pointeurs\n");
   /* Affichage des éléments du tableau */
  for(iCompteur=0; iCompteur<10;iCompteur++)
    printf("le %d element du tableau a pour valeur : %d \n",iCompteur,*(tableau_de_pointeurs[iCompteur])); 


  /* Pour allouer de la memoire au pointeur sur tableau */
  pointeur_sur_tableau=(type_pointeur_sur_tableau)malloc(sizeof(int[10]));

  /* Affectation de valeurs aux élements du tableau */
  for(iCompteur=0; iCompteur<10;iCompteur++)
    (*pointeur_sur_tableau)[iCompteur]=iCompteur;

  printf("\nAffichage des éléments du tableau d'entiers pointé\n");
  /* Affichage des éléments du tableau */
  for(iCompteur=0; iCompteur<10;iCompteur++)
    printf("le %d element du tableau a pour valeur : %d \n",iCompteur,(*pointeur_sur_tableau)[iCompteur]);
   

  /* Pour affecter au pointeur l'adresse d'un tableau de 10 entiers */
  pointeur_sur_tableau=&iTab;

   printf("\n Autre Affichage des éléments du tableau d'entiers pointé\n");
  /* Affichage des éléments du tableau */
  for(iCompteur=0; iCompteur<10;iCompteur++)
    printf("le %d element du tableau a pour valeur : %d \n",iCompteur,(*pointeur_sur_tableau)[iCompteur]);

}

