vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 2010
-
15 janv. 2004 à 18:28
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 2004
-
16 janv. 2004 à 06:01
j'ai une petite question à propos des tableaux multidimentionnels: comment doit on déclarer un argument formel pour un tableau de ce type dans une fonction
Si je je le fais de la manière suivante
sebseb42
Messages postés495Date d'inscriptiondimanche 6 juillet 2003StatutMembreDernière intervention 9 novembre 20071 15 janv. 2004 à 23:03
c'est assez dangereux de faire ca
ce que je ne comrend pas, c'est pourquoi tu ne fait pas ca :
int t[2][2];
f((int**)t);
sinon tu disais que tu ne savais pas cb de case tu avais dans ton tableau et que tu utilisais n, or, int t[n] le compilo te pete une erreur, et par consequent si tu utilise n, tu doit malloquer, et si tu malloc, tu doit utiliser un int **, et donc cela ne pose pu de prob avec ton prototype void f(int **t);
enfin sinon c'est que j'ai pas tout bien tout compris
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 15 janv. 2004 à 23:43
c'est ca tu n'as pas bien compris
- f((int**)t) ne marche pas lors de l'éxécution, ca je l'ai écrit des le début
- n est utilisé dans la f pour lui dire la taille du tableau et non pas pour créer ce tableau
// ici t[i] est un int* (en dehors du context du prototype
// car dans le main, il a beau caster en int*, le tableau
// reste un tableau, donc un int**
}
void main()
{
int t[2][2]={{1,25},{2,50}};
f((int*)t);
}
en fait ca fonctionne parceque int t[2][2] le compilo organise les cellules des tableaux de maniere adjacentes dans la memoire, le jour ou cela ne sera plus vrai, ca fonctionnera pu
sebseb42
Messages postés495Date d'inscriptiondimanche 6 juillet 2003StatutMembreDernière intervention 9 novembre 20071 16 janv. 2004 à 00:39
aussi, i < sizeof(t) est valide parceque t est un simple pointeur (dans la fonction f) donc sizeof(t) == 4 et que t[2][2] == 4 octets aussi (dans le main), mais voyons la chose differement:
t[10][10] sizeof(t) == 100 (dans le main) et sizeof(t) est toujours egale a 4 (dans la fonction f) parceque int* est toujours un pointeur
sizeof ne se soucie pas de savoir sur quoi il pointe, il se soucie juste de savoir que c'est un pointeur, et qu'un pointeur est codé sur 4 octets
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 16 janv. 2004 à 06:01
ouai je me suis planté, d'ailleur si ca avait etet un tableau j'aurai du faire sizeof t/sizeof t[0] mais de toute facon comme tu dit c'etait un pointeur on perd l'information sur la taille