Taille d'un tableau en C
Résolu
Franck7511
Messages postés
14296
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je voudrais savoir s'il était possible de créer un tableau (d'entiers par ex.) d'une taille définie par l'utilisateur, du genre :
int n;
scanf("%d",n);
int * tableau[n];
J'ai lu que c'était "possible en C99 mais pas pour les raisons auxquelles on pense" sur Internet, mais mes profs m'ont dit que ce n'était pas possible.
Des personnes pour clarifier la situation ?
Merci, bonne soirée !
Je voudrais savoir s'il était possible de créer un tableau (d'entiers par ex.) d'une taille définie par l'utilisateur, du genre :
int n;
scanf("%d",n);
int * tableau[n];
J'ai lu que c'était "possible en C99 mais pas pour les raisons auxquelles on pense" sur Internet, mais mes profs m'ont dit que ce n'était pas possible.
Des personnes pour clarifier la situation ?
Merci, bonne soirée !
A voir également:
- Taille d'un tableau en C
- Comment réduire la taille d'un fichier - Guide
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Imprimer un tableau excel - Guide
1 réponse
Bonjour,
Oui c'est possible. La façon classique de faire est l'allocation dynamique avec malloc/calloc.
Exemple :
On crée un pointeur (char *tableau), on alloue une zone dans la mémoire Heap de n entiers (malloc(n*sizeof(*tableau));) et on fait pointer tableau sur cette zone fraichement créée (tableau=malloc...).
Jusqu'au C99, il n'y avait que cette façon de faire. int tableau[n]; était une erreur puisque n devait être un nombre;
Le C99 fait apparaître, entre autres, le Variable Length Array qui permet d'écrire le code que tu as écrit. Mais quand on débute, c'est mieux de commencer avec le malloc/calloc qui est un mécanisme important. D'autant que tous les compilateurs ne sont pas conformes C99.
Pour ton prof qui dit que ce n'est pas possible, c'est tout simplement qu'il n'est pas à jour.
Cdlt,
Oui c'est possible. La façon classique de faire est l'allocation dynamique avec malloc/calloc.
Exemple :
Explication :
int n;
int ret;
ret=scanf("%d", &n);
if (ret==1 && n>0) {
char *tableau;
tableau = malloc(n * sizeof(*tableau));
...
free(tableau), tableau=NULL;
}
On crée un pointeur (char *tableau), on alloue une zone dans la mémoire Heap de n entiers (malloc(n*sizeof(*tableau));) et on fait pointer tableau sur cette zone fraichement créée (tableau=malloc...).
Jusqu'au C99, il n'y avait que cette façon de faire. int tableau[n]; était une erreur puisque n devait être un nombre;
Le C99 fait apparaître, entre autres, le Variable Length Array qui permet d'écrire le code que tu as écrit. Mais quand on débute, c'est mieux de commencer avec le malloc/calloc qui est un mécanisme important. D'autant que tous les compilateurs ne sont pas conformes C99.
Pour ton prof qui dit que ce n'est pas possible, c'est tout simplement qu'il n'est pas à jour.
Cdlt,
En fait mon problème serait plutôt de créer une matrice, mais ça ne doit pas changer grand chose ;)
Bref, résolu et encore merci !
Exemple rapide d'une matrice X lignes, Y colonnes (sans contrôle des valeurs de retour) :