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
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
A voir également:
- Récupérer les dimensions d'un tableau en C ?
- Tableau croisé dynamique - Guide
- Comment recuperer un message supprimé sur whatsapp - Guide
- Tableau ascii - Guide
- Comment faire un tableau - Guide
- Recuperer video youtube - Guide
11 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
23 janv. 2008 à 21:59
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
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
tatou_38
Messages postés
1928
Date d'inscription
vendredi 21 avril 2006
Statut
Membre
Dernière intervention
5 août 2015
121
23 janv. 2008 à 22:12
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.
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.
tatou_38
Messages postés
1928
Date d'inscription
vendredi 21 avril 2006
Statut
Membre
Dernière intervention
5 août 2015
121
23 janv. 2008 à 20:56
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 !
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
24 janv. 2008 à 00:06
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.
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.
tatou_38
Messages postés
1928
Date d'inscription
vendredi 21 avril 2006
Statut
Membre
Dernière intervention
5 août 2015
121
24 janv. 2008 à 08:55
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 !
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
24 janv. 2008 à 11:07
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 ;)