Pointeur et tableau - C++ - Programmation
Marsh Posté le 17-05-2006 à 11:34:46
int *tab est un pointeur sur int
int tab[2][2] est un tableau d'in a deux dimensions
int *tab est juste un pointeur: ça ne permet pas de transporter les caractéristiques d'un tableau.
Marsh Posté le 17-05-2006 à 11:35:01
C'est normal, ton tableau a deux dimensions, c'est donc l'équivalent d'un int **, et non pas d'un int*
Donc, tab[0], c'est la premiere ligne de ton tableau, soit un int tab[2], qui est l'équivalent d'un int *, donc ca marche.
Marsh Posté le 17-05-2006 à 11:36:16
La réponse est simple,
tab[2][2] équivaut à un tableau **tab (pointeur de pointeur)
lorsque tu transmet tab[0] tu donne comme paramètre *tab (en gros, c'est la valeur désignée par le pointeur de pointeur donc cette valeur est un pointeur), ce qui correspond à la définition de ta fonction.
Suis-je clair?
Marsh Posté le 17-05-2006 à 11:36:25
non plus.
int ** est un pointeur sur pointeur de int.
---
edit: oui en fait suivant comment on se place.
Marsh Posté le 17-05-2006 à 11:38:21
en fait ça explique pourquoi avec fct(tab[0]) ça marche, mais c'est pas ce qu'il veut je pense.
Marsh Posté le 17-05-2006 à 11:50:24
boost::array ou boost::multi_array ou meme
Code :
|
Durkheim & gwenCPP > vous avez plus qu'a revoir ce qu'est un tableau, en c++ un tableau multidimensionnel est un tableau de tableau, ca implique que les donnees sont contigues et l'adresse de ce genre de tableau n'est pas typée 'int **' dans le cas d'un tableau 2d mais 'int (*)[N]'
Marsh Posté le 17-05-2006 à 12:09:34
pourquoi ne pas utiliser les vector ? et les vector de paires ? les tableaux saÿ mal
Marsh Posté le 17-05-2006 à 12:14:29
la taille est connue à la compilation, mais bon, le vrai probleme c'est que les tableaux multidimensionnelles avec std::vector c'est une syntaxe lourde et les données sont fragmentées
Marsh Posté le 17-05-2006 à 12:15:29
skelter a écrit : la taille est connue à la compilation, mais bon, le vrai probleme c'est que les tableaux multidimensionnelles avec std::vector c'est une syntaxe lourde et les données sont fragmentées |
syntaxe lourde a moins de connaitre la bidouille pour les typedef (expliquée dans developpez.com)
Marsh Posté le 17-05-2006 à 12:21:59
tu peux toujours alleger une syntaxe avec un typedef, ca c'est une regle generale, mais ca n'empeche rien au fait que std::vector n'est pas une bonne solution pour les tableaux multi dimensionnels, regardes boost::multi_array
Marsh Posté le 21-05-2008 à 21:24:27
casafa a écrit : Bonjour,
|
10 000 ans plus tard...
La réponse est ultra simple. Cela n'a rien avoir avec les dimensions!!! En fait quand tu passes fct(tab) tu passes un pointeur CONSTANT sur tab[0]. Mais dans ton code tu fais tab++. C'est impossible de modifier tab puisqu'il est constant. Ca marcherait, tu créais un variable pointeur vers ton tableau dans ta fonction:
Code :
|
Salut
Marsh Posté le 21-05-2008 à 21:25:14
casafa a écrit : Bonjour,
|
10 000 ans plus tard...
La réponse est ultra simple. Cela n'a rien avoir avec les dimensions!!! En fait quand tu passes fct(tab) tu passes un pointeur CONSTANT sur tab[0]. Mais dans ton code tu fais tab++. C'est impossible de modifier tab puisqu'il est constant. Ca marcherait, tu créais un variable pointeur vers ton tableau dans ta fonction:
Code :
|
Salut
Marsh Posté le 22-05-2008 à 12:51:43
cte remontage de post ...
Marsh Posté le 22-05-2008 à 14:42:52
si on pouvait arrêter le deterrage de truc C. Hier déjà y en a eu, c'est lourd.
Marsh Posté le 17-05-2006 à 11:26:13
Bonjour,
Voici le code de ma fonction:
Et voici mon tableau:
int tab[2][2] = {{1,2},{3,4}};
Pour appeler ma fonction j'utilise : fct(tab); et j'ai le droit à une erreur à la compilation...alors que si je met fct(tab[0]);, je n'ait pas d'erreur : pourquoi ?
Merci...