|
|
|
|
Langage C, MACRO pour tableau
Dernière réponse le 26 sep 2007 à 20:28:39 maymay, le 21 sep 2007 à 04:14:25C'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 :
#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
|
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.
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 |

