Comment faire pour ...
Créer un tableau dont la taille est inconnue au départ (mémoire dynamique) |
Créer un tableau
dont la taille est inconnue au départ (mémoire dynamique) :
Plutôt que d'affecter une valeur énorme pour être sûr que les données vont rentrer vous pouvez vous inspirer de l'exemple suivant :
#include <stdio.h>
#include <stdlib.h>
int *tab; //
Il faut considérer le tableau comme un pointeur pour
utiliser cette méthode !
// Dans cet exemple le tableau est fait d'entiers
int main()
{
int taille;
taille=9999; // J'ai mis
taille = 9999 c'est cela que l'on suppose inconnu au début j'aurais aussi pu
demander de saisir la taille
tab=(int (*)) malloc(taille*sizeof (int)); //
Il y a int car le tableau est fait d'entiers dans cet exemple
tab[5432]=43;
// Ensuite on peut utiliser le tableau normalement !
printf("%d",tab[5432]);
getch();
}
Des listes
chaînées (mémoire dynamique) :
#include <stdio.h>
#include <stdlib.h>
typedef struct sliste
{
int a;
// Elément de la liste ici un entier
struct sliste *succ; // Pointeur sur le successeur
}liste;
int main()
{
liste *Nouveau;
liste *Courant; // Là où on en est dans la liste (= dernier de la liste lors de la création)
liste *Tete; // Pointeur sur le début du tableau
int i;
// insertion de 10000 éléments (0 à 9999) dans un tableau avec pointeurs
for (i=0;i<=9999;i++)
{
Nouveau=(liste *)malloc(sizeof(liste));
// Création de l'élément
if (i==0)
// Insertion du premier élément
{
Tete=Nouveau;
// Affectation de la tête
Nouveau->a=i;
// Affectation de l'élément
Courant=Nouveau;
}
else
{
Courant->succ=Nouveau;
// Chaînage
Nouveau->a=i;
// Affectation de l'élément
Courant=Nouveau;
}
}
// relecture
Courant=Tete;
while (Courant->succ!=NULL)
// Le dernier élément de la liste n'a pas de successeur
{
printf ("%d\n",Courant->a);
Courant=Courant->succ;
// On parcourt grâce au chaînage
}
// Affichage du dernier
printf ("%d",Courant->a);
getch();
}