Récupérer les dimensions d'un tableau en C ?
Papi
-
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 à tous,
Comme le nom de ce message l'indique, je débute en langage C et je voudrais faire un programme qui aura comme entrée un tableau deux dimensions quelquonque, et mon problème est que je ne vois pas comment récupérer ses dimensions pour les mettres dans des variables ?
Je pense que la solution est toute simple, mais je me prends la tête la dessus depuis un petit bout de temps.
Merci
Comme le nom de ce message l'indique, je débute en langage C et je voudrais faire un programme qui aura comme entrée un tableau deux dimensions quelquonque, et mon problème est que je ne vois pas comment récupérer ses dimensions pour les mettres dans des variables ?
Je pense que la solution est toute simple, mais je me prends la tête la dessus depuis un petit bout de temps.
Merci
A voir également:
- Récupérer les dimensions d'un tableau en C ?
- Tableau word - Guide
- Trier un tableau excel - Guide
- Comment récupérer les messages supprimés sur whatsapp - Guide
- Tableau ascii - Guide
- Imprimer un tableau excel - Guide
11 réponses
Salut,
Tu parles de tableau à taille aléatoire, donc, tu vas devoir faire de l'allocation dynamique.
Dans ce cas, tu passes tout simplement la taille de ton tableau en paramètre.
Avec une allocation statique, par exemple char buffer[25][50]; tu peux utiliser sizeof();
Cordialement
Tu parles de tableau à taille aléatoire, donc, tu vas devoir faire de l'allocation dynamique.
Dans ce cas, tu passes tout simplement la taille de ton tableau en paramètre.
Avec une allocation statique, par exemple char buffer[25][50]; tu peux utiliser sizeof();
Cordialement
Tu veux faire de la géométrie dans l'espace, il te faut donc un tableau à trois dimensions :
tab[x][y][z]
Ce tableau pointe sur un objet, qui peut être un entier, une chaîne de caractères, une structure de données, enfin tout ce que tu veux !
ex :
typedef struct {
int couleur;
long poids;
char indice;
} tDonnees;
pour une déclaration statique :
tDonnees tab[20][40][50];
pour une allocation dynamique, à base de malloc, mais il faut allouer toutes les cases une par unes (trois foucles for(;;); imbriquées) sans oublier la déallocation quand tu as fini. Plus compliqué, mais plus performant car tu n'utilise que la mémoire utile, et tu peux toujours "pousser les murs" à l'exécution.
tab[x][y][z]
Ce tableau pointe sur un objet, qui peut être un entier, une chaîne de caractères, une structure de données, enfin tout ce que tu veux !
ex :
typedef struct {
int couleur;
long poids;
char indice;
} tDonnees;
pour une déclaration statique :
tDonnees tab[20][40][50];
pour une allocation dynamique, à base de malloc, mais il faut allouer toutes les cases une par unes (trois foucles for(;;); imbriquées) sans oublier la déallocation quand tu as fini. Plus compliqué, mais plus performant car tu n'utilise que la mémoire utile, et tu peux toujours "pousser les murs" à l'exécution.
Qu'est ce que tu veux dire par des "tableaux en entrée du programme" ??
Un programme C a en entrée toujours une liste d'arguments, ceux fournis au lancement du programme. Après le programme peut faire l'acquisition de données, à toi de les ranger sous la forme que tu souhaites !
Précise ta question !
Un programme C a en entrée toujours une liste d'arguments, ceux fournis au lancement du programme. Après le programme peut faire l'acquisition de données, à toi de les ranger sous la forme que tu souhaites !
Précise ta question !
Tout d'abord, merci pour ta rapidité tatou_38,
En fait je voudrais créer une fonction ayant comme entrée la matrice d'un objet, c'est à dire un tableau contenant les coordonnées X, Y et Z de chaque angle de l'objet, donc un tableau de 3 colonnes et autant de ligne qu'il y a d'angle.
Et à partir de la, je voudrais appliquer des matrices de transformation pour effectuer une translation, une diminution ou une rotation de l'objet en 3D. Donc j'aurai besoin de savoir combien il y a de ligne dans ce tableau pour appliquer mes matrices de transformation.
Les objets pouvant varier, cette fonction doit s'adapter.
Merci
En fait je voudrais créer une fonction ayant comme entrée la matrice d'un objet, c'est à dire un tableau contenant les coordonnées X, Y et Z de chaque angle de l'objet, donc un tableau de 3 colonnes et autant de ligne qu'il y a d'angle.
Et à partir de la, je voudrais appliquer des matrices de transformation pour effectuer une translation, une diminution ou une rotation de l'objet en 3D. Donc j'aurai besoin de savoir combien il y a de ligne dans ce tableau pour appliquer mes matrices de transformation.
Les objets pouvant varier, cette fonction doit s'adapter.
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci beaucoup pour votre efficacité,
La commande sizeof() correspond tout à fait à ce que je voulais faire.
Sinon tatou_38, par curiosité comment tu fais la déallocation, parce que ca m'intéresse de pouvoir pousser les murs comme tu dis, cela m'a l'air très pratique.
Merci
La commande sizeof() correspond tout à fait à ce que je voulais faire.
Sinon tatou_38, par curiosité comment tu fais la déallocation, parce que ca m'intéresse de pouvoir pousser les murs comme tu dis, cela m'a l'air très pratique.
Merci
Attention Papi.
Soit tu fais de l'allocation dynamique, c'est-à-dire utilisation de malloc et cie, et dans ce cas là, tu peux refaire de la réallocation (realloc) et enfin libérer l'espace mémoire (free). Mais pas de sizeof
Soit tu fais de l'allocation statique, et là, tu peux utiliser sizeof.
Soit tu fais de l'allocation dynamique, c'est-à-dire utilisation de malloc et cie, et dans ce cas là, tu peux refaire de la réallocation (realloc) et enfin libérer l'espace mémoire (free). Mais pas de sizeof
Soit tu fais de l'allocation statique, et là, tu peux utiliser sizeof.
Merci fiddy pour toutes ses préscisions.
J'étais partie pour travailler en statique donc je vais continuer, mais passer en dynamique pourra être une idée d'optimisation pour plus tard.
Merci
PS : C'est la première fois que je poste sur ce forum et je suis impréssionné de la rapidité de réponse.
J'étais partie pour travailler en statique donc je vais continuer, mais passer en dynamique pourra être une idée d'optimisation pour plus tard.
Merci
PS : C'est la première fois que je poste sur ce forum et je suis impréssionné de la rapidité de réponse.
en c++ 2type de tableau :
_ les statiques dont la taille et la dimension sont déclarer avant en paramètre (ne peut pas s'agrandir, limité en nombre de ressource de stockage)
_ les Vectoriel (ce que tu dis dynamique).
Si tu compte compter les cases du tableau en disant que lorsqu'une case est vide alors c'est la fin du tableau, n'oublie qu'un tableau à des valeurs quelconque attribué lors de sa création du type : -45643186431498156, ou 45153545646546513.
_ les statiques dont la taille et la dimension sont déclarer avant en paramètre (ne peut pas s'agrandir, limité en nombre de ressource de stockage)
_ les Vectoriel (ce que tu dis dynamique).
Si tu compte compter les cases du tableau en disant que lorsqu'une case est vide alors c'est la fin du tableau, n'oublie qu'un tableau à des valeurs quelconque attribué lors de sa création du type : -45643186431498156, ou 45153545646546513.
oui, tu as raison. C'est pourquoi c'est une bonne habitude de mettre à zéro de suite après tout malloc(), cela évite souvent bien des soucis !