Taille d'un tableau en C
Résolu/Fermé
Franck7511
Messages postés
14296
Date d'inscription
jeudi 24 décembre 2009
Statut
Membre
Dernière intervention
10 août 2017
-
27 oct. 2013 à 01:50
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 27 oct. 2013 à 17:36
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 27 oct. 2013 à 17:36
A voir également:
- Taille d'un tableau en C
- Comment réduire la taille d'un fichier - Guide
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Comment faire un tableau - Guide
- Trier un tableau excel - Guide
1 réponse
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
27 oct. 2013 à 10:37
27 oct. 2013 à 10:37
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,
27 oct. 2013 à 11:47
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 !
Modifié par fiddy le 27/10/2013 à 17:36
Exemple rapide d'une matrice X lignes, Y colonnes (sans contrôle des valeurs de retour) :