Récupérer les dimensions d'un tableau en C ?

Fermé
Papi - 23 janv. 2008 à 20:12
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 24 janv. 2008 à 11:07
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
A voir également:

11 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
23 janv. 2008 à 21:59
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
1
tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 120
23 janv. 2008 à 22:12
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.




1
tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 120
23 janv. 2008 à 20:56
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 !
0
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
0

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
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
24 janv. 2008 à 00:06
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.
0
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.
0
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.
0
tatou_38 Messages postés 1928 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 5 août 2015 120
24 janv. 2008 à 08:55
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 !
0
j'ai une certaines expérience des erreurs à la con parce que j'ai été trop faineant pour mettre le tableau a 0 ^^ donc depuis c'est devenu une habitude
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
24 janv. 2008 à 11:07
Je tiens à vous rappeler que l'initialisation avec calloc remplie la zone avec des 0. Ce qui peut être pratique ;)
0