Langage C, MACRO pour tableau
Résolu/Fermé
maymay
-
21 sept. 2007 à 04:14
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 26 sept. 2007 à 20:28
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 26 sept. 2007 à 20:28
A voir également:
- Langage C, MACRO pour tableau
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Trier tableau excel - Guide
5 réponses
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
21 sept. 2007 à 10:11
21 sept. 2007 à 10:11
c'est une macro qui calcule la taille mémoire occupée par un tableau (sizeof(array)) et la divise par la taille d'une case de tableau (sizeof(*array) = sizeof(array[0])). Le résultat est casté en int (mais ça ne sert en fait à rien car c'est déjà un entier, quitte à caster ça aurait été plus logique de le faire vers un unsigned). Pour t'en convaincre écris ce petit programme :
Compile le et exécute le :
828 = la taille occupée par le tableau de 69 long double
12 = la taille d'un long double
69 = le nombre de case
Tu peux essayer de changer "long double" par un autre type, tu verras que ça continue à marcher. Par contre ça ne marchera pas avec un tableau alloué dynamiquement (avec un malloc).
Bonne chance
#include <stdio.h> int main(){ long double tab[69]; printf( "sizeof(tab) = %i sizeof(*tab) = %i sizeof(tab)/sizeof(*tab)=%i\n", sizeof(tab),sizeof(*tab),sizeof(tab)/sizeof(*tab) ); return 0; }
Compile le et exécute le :
(mando@aldur) (~) $ gcc -W -Wall main.c (mando@aldur) (~) $ ./a.out sizeof(tab) = 828 sizeof(*tab) = 12 sizeof(tab)/sizeof(*tab)=69
828 = la taille occupée par le tableau de 69 long double
12 = la taille d'un long double
69 = le nombre de case
Tu peux essayer de changer "long double" par un autre type, tu verras que ça continue à marcher. Par contre ça ne marchera pas avec un tableau alloué dynamiquement (avec un malloc).
Bonne chance
mamiendo, merci d'avoir repondu , j'ai executé le code mais , j'obtiens des resultats differents
690=taille occupé par le tableau de 69 long double
10= taille d'un long double
69=nombre de case
deux autre petites question
quel est l'interet de definir cette macro dans un code , on pouvait tout simplement definir une cst = NBR_ELMT ;
what's that ???
(mando@aldur) (~) $ gcc -W -Wall main.c
(mando@aldur) (~) $ ./a.out
sizeof(tab) = 828 sizeof(*tab) = 12 sizeof(tab)/sizeof(*tab)=69
690=taille occupé par le tableau de 69 long double
10= taille d'un long double
69=nombre de case
deux autre petites question
quel est l'interet de definir cette macro dans un code , on pouvait tout simplement definir une cst = NBR_ELMT ;
what's that ???
(mando@aldur) (~) $ gcc -W -Wall main.c
(mando@aldur) (~) $ ./a.out
sizeof(tab) = 828 sizeof(*tab) = 12 sizeof(tab)/sizeof(*tab)=69
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
23 sept. 2007 à 23:59
23 sept. 2007 à 23:59
Pour la différence de résultat c'est peut être que les long double ne sont pas encodés sur autatnt de bits sous windows et sous linux.
L'intérêt de la macro c'est qu'elle marche pour tout tableau alloué de manière statique. Ca veut en particulier dire que tu peux l'utiliser pour tableau de différentes tailles et de différents types. Par exemple :
Mais bon de manière général c'est mieux d'allouer tes tableaux dynamiquement avec un malloc et de les desallouer avec un free, car on connaît rarement la taille requise pour un tableau pour toute exécution d'un programme. Souvent cela sous entend que le tableau est suralloué et que de la mémoire est "gaspillée".
Pour le what's that c'est simplement les deux commandes à taper sous linux pour compiler le programme, et te montrer ce que ca donne à l'exécution.
D'autres questions ? ;-)
Bonne chance
L'intérêt de la macro c'est qu'elle marche pour tout tableau alloué de manière statique. Ca veut en particulier dire que tu peux l'utiliser pour tableau de différentes tailles et de différents types. Par exemple :
int tab[58]; char tab2[7]; long double tab3[567];
Mais bon de manière général c'est mieux d'allouer tes tableaux dynamiquement avec un malloc et de les desallouer avec un free, car on connaît rarement la taille requise pour un tableau pour toute exécution d'un programme. Souvent cela sous entend que le tableau est suralloué et que de la mémoire est "gaspillée".
Pour le what's that c'est simplement les deux commandes à taper sous linux pour compiler le programme, et te montrer ce que ca donne à l'exécution.
D'autres questions ? ;-)
Bonne chance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
26 sept. 2007 à 20:28
26 sept. 2007 à 20:28
Parfait alors je clos le sujet ;)