Langage C et les structures

Fermé
Delph - 29 janv. 2003 à 20:05
sha Messages postés 9 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 19 février 2003 - 30 janv. 2003 à 22:55
j'essaie en vain de déclarer un tableau dont la dimension est un entier qui est un élément de la structure, mais le programme ne veut pas compiler car il me dit que ce n'est pas une constante.

Or, même si je mets au préaléble, cet élément de la structure dans un autre entier et que je passe cet autre entier, il ne veut pas non plus?

Que dois-je faire???

Merci d'avance pour votre aide!!!
A voir également:

4 réponses

haiti Messages postés 18 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 26 mars 2003
29 janv. 2003 à 20:41
Les tableaux doivent avoir une dimension fixe. C'est pour cela dans la déclaration , la dimension est une constante.
Si tu veux dynamiquement crée des tableaux à dimension variable, tu peux faire des listes chainées.


-->Hey You Keep Cool.
0
Krizniak Messages postés 26 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 10 février 2003 4
30 janv. 2003 à 16:02
En C, par constante, on entend soit :
- une constante figurative telle 8, 25 ou 550
- une définition de type macro, donnée par l'instruction "#define NBELEM 250"

D'autre part, pour revenir à ce que disais haiti, au nom évocateur (vivement les vacances au soleil...), tu peux créer des tableaux à dimension variable. Attention cependant à ne pas confondre tableaux et listes chaînées. Les tableaux sont des éléments qui, en mémoire, sont contigus ! Pour les listes, les éléments sont alloués de de manière aléatoire en mémoire.

Allons plus loin : un tableau statique est défini sur le tas (stack), qui est une portion de mémoire associé au programme. Sa taille en est fixe (stack size).
Par contre, un tableau dynamique, ou une liste, est généralement définie sur la pile (heap), dont la taille est déterminée par les ressources disponibles.

Enfin, voici la 'syntaxe' pour définir un tableau de manière dynamique :
long arrSize = 10;
long *lngArr; //définition d'un pointeur sur le type de contenu du tableau
lngArr = new long[arrSize] ;
Cette syntaxe permet d'allouer la mémoire nécessaire au tableau.
S'assurer, bien entendu, avant usage, que le pointeur retourné n'est pas NULL...

Krizniak
Mon crédo : "Aide-toi, le ciel t'aidera..."
0
sha Messages postés 9 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 19 février 2003
30 janv. 2003 à 22:52
Une autre facon de déclarer un tableau de maniere dynamique :
malloc et calloc

int taille;
int * tab;
printf ("entrer la taille du tableau");
scanf ("%d",&taille);
tab = (int *) (malloc (taille * sizeoff (int));

et voila ta ton tableau de taille "taille"
0
sha Messages postés 9 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 19 février 2003
30 janv. 2003 à 22:55
Euh désolé, j'ai fait une petite erreur.
Cette ligne
tab = (int *) (malloc (taille * sizeoff (int));
est a remplacé par
tab = (int *) (malloc ( sizeof (taille * int));
0