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

Papi -  
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
A voir également:

11 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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 1937 Date d'inscription   Statut Membre Dernière intervention   121
 
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 1937 Date d'inscription   Statut Membre Dernière intervention   121
 
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
Papi
 
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
Papi
 
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   Statut Contributeur Dernière intervention   1 846
 
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
Papi
 
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
bowbow13
 
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 1937 Date d'inscription   Statut Membre Dernière intervention   121
 
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
bowbow13
 
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   Statut Contributeur Dernière intervention   1 846
 
Je tiens à vous rappeler que l'initialisation avec calloc remplie la zone avec des 0. Ce qui peut être pratique ;)
0