Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2540 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Pointeur et tableau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pointeur et tableau

n°1368551
casafa
Posté le 17-05-2006 à 11:26:13  profilanswer
 

Bonjour,
 
Voici le code de ma fonction:
 

Code :
  1. void fct(int *tab){
  2.   tab++;
  3.   printf("%d", *tab);
  4. }

 

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...

mood
Publicité
Posté le 17-05-2006 à 11:26:13  profilanswer
 

n°1368561
bjone
Insert booze to continue
Posté le 17-05-2006 à 11:34:46  profilanswer
 

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.


Message édité par bjone le 17-05-2006 à 11:34:58
n°1368562
durkheim
Posté le 17-05-2006 à 11:35:01  profilanswer
 

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.


Message édité par durkheim le 17-05-2006 à 11:37:27
n°1368563
gwenCPP
Je taf
Posté le 17-05-2006 à 11:36:16  profilanswer
 

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?


---------------
Dans la vie le meilleur chemin n'est pas forcément le plus droit mais celui sur lequel on se sent le plus à l'aise
n°1368564
bjone
Insert booze to continue
Posté le 17-05-2006 à 11:36:25  profilanswer
 

non plus.
 
int ** est un pointeur sur pointeur de int.
 
---
 
edit: oui en fait suivant comment on se place.


Message édité par bjone le 17-05-2006 à 11:37:13
n°1368566
bjone
Insert booze to continue
Posté le 17-05-2006 à 11:38:21  profilanswer
 

en fait ça explique pourquoi avec fct(tab[0]) ça marche, mais c'est pas ce qu'il veut je pense.


Message édité par bjone le 17-05-2006 à 13:18:35
n°1368593
skelter
Posté le 17-05-2006 à 11:50:24  profilanswer
 

boost::array ou boost::multi_array ou meme
 

Code :
  1. template <std::size_t L, std::size_t C>
  2. void fct(int (&tab)[L][C])
  3. {
  4. }


 
 
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]'

n°1368623
Thordax
Shop smart. Shop S-Mart !
Posté le 17-05-2006 à 12:09:34  profilanswer
 

pourquoi ne pas utiliser les vector ? et les vector de paires ? les tableaux saÿ mal :o


---------------
Atari 520 ST 256 Ko
n°1368630
skelter
Posté le 17-05-2006 à 12:14:29  profilanswer
 

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

n°1368632
Thordax
Shop smart. Shop S-Mart !
Posté le 17-05-2006 à 12:15:29  profilanswer
 

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)


---------------
Atari 520 ST 256 Ko
mood
Publicité
Posté le 17-05-2006 à 12:15:29  profilanswer
 

n°1368640
skelter
Posté le 17-05-2006 à 12:21:59  profilanswer
 

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

n°1368643
skelter
Posté le 17-05-2006 à 12:23:19  profilanswer
 

enfin c'est au moins une solution standard

n°1735402
bouboufach​e4
Posté le 21-05-2008 à 21:24:27  profilanswer
 

casafa a écrit :

Bonjour,
 
Voici le code de ma fonction:
 

Code :
  1. void fct(int *tab){
  2.   tab++;
  3.   printf("%d", *tab);
  4. }


 
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...


 
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 :
  1. void fct(int *tab){
  2. tab++;
  3. int * tab_ptr = &tab;
  4. tab_ptr++;
  5. printf("%d", *tab);
  6. }


Salut

n°1735405
bouboufach​e4
Posté le 21-05-2008 à 21:25:14  profilanswer
 

casafa a écrit :

Bonjour,
 
Voici le code de ma fonction:
 

Code :
  1. void fct(int *tab){
  2.   tab++;
  3.   printf("%d", *tab);
  4. }


 
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...


 
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 :
  1. void fct(int *tab){
  2. int * tab_ptr = &tab;
  3. tab_ptr++;
  4. printf("%d", *tab);
  5. }


Salut

n°1735622
Thordax
Shop smart. Shop S-Mart !
Posté le 22-05-2008 à 12:51:43  profilanswer
 

cte remontage de post ... [:mlc2]


---------------
Atari 520 ST 256 Ko
n°1735640
bjone
Insert booze to continue
Posté le 22-05-2008 à 13:19:06  profilanswer
 

c'est une pelle d'argent je pense.

n°1735684
Elmoricq
Modérateur
Posté le 22-05-2008 à 14:38:21  profilanswer
 

http://www.izipik.com/images/20080522/lukdqpjx9p9miy4d1x-deterrage.png

n°1735688
Taz
bisounours-codeur
Posté le 22-05-2008 à 14:42:52  profilanswer
 

si on pouvait arrêter le deterrage de truc C. Hier déjà y en a eu, c'est lourd.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Pointeur et tableau

 

Sujets relatifs
Transféré un tableau entre 2 form ? Pointeur ?[Delphi] tableau et pointeur
tableau à 2 dimensions et pointeurcast vers un pointeur sur tableau
Pointeur + Tableau : récupération d'un entierTableau de pointeur
[C++] Tableau de pointeur de tableau[C] [ résolu]pbm pointeur et tableau de structures
tableau de pointeur sur fonction !!![c++] effacer un tableau de pointeur
Plus de sujets relatifs à : Pointeur et tableau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR