Langage C: Problème de retour de Pointeur dans une fonction
loic911
Messages postés24Date d'inscriptionsamedi 6 novembre 2004StatutMembreDernière intervention10 mai 2005
-
29 janv. 2005 à 15:29
vdust
Messages postés43Date d'inscriptionjeudi 16 décembre 2004StatutMembreDernière intervention14 mars 2007
-
30 janv. 2005 à 21:14
Salut
J'aimerais bien renvoyer l'endroit d'un pointeur sur un tableau a deux dimension à une autre fonction
exemple:
void main
{
fct1 (&tab[0][0});
fct2 (&tab[0][0});
}
void fct1 (int *p)
{
mon pointeur P2 se déplace jusqu'a un endroit X (par exemple tab[2][5]) à partir du pointeur P
}
void fct2 ()
{
Je réutilise l'endroit du pointeur P2 (par exemple tab[2][5]) de la fonction 1 pour vérifier des conditions...
J'utilise le même tableau
}
Je peux faire ca qu'en C donc ca sert a rien de me proposer des alternative
J'avais penser a un "return" dans la première fonction mais ca va pas
A voir également:
Langage C: Problème de retour de Pointeur dans une fonction
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 29 janv. 2005 à 17:27
Ca veut rien dire "l'endroit d'un pointeur". Personnellement je
comprend pas bien ce que tu veux. Pour passer des tableaux a deux
dimensions, il faut définir tes fonctions comme ca:
void fct1 (int p[][4]) // 4 correspondant a la taille de la deuxième dimension
{
//et la tu fais ce que tu veux avec p.
}
vdust
Messages postés43Date d'inscriptionjeudi 16 décembre 2004StatutMembreDernière intervention14 mars 2007 29 janv. 2005 à 22:27
Salut !
Commençons par les définitions (je pense que tu les connais, mais c'est
toujours utile de le rappeler) : un pointeur vers un objet est une
variable qui contient l'adresse de cet objet. Dans ton cas, l'objet est
un tableau. A la création du tableau, par exemple
int tab[10][4];
l'identifiant tab
est un pointeur vers ton tableau 4x10. Ainsi, lorsque tu appelles ta première fonction, tu peux lui passer directement tab ou bien, comme tu le fais déjà &tab[0][0] (ça reviens au même :).
Dans le cas qui t'intéresses, tu souhaites passer à la deuxième fonction un pointeur vers la donnée à l'adresse &tab[x][y]
Il faut pour cela de passer en argument à fct2 ce pointeur. La
fonction fct1 doit donc retourner ce pointeur. Quelques modifications
de la fonction 1 sont nécessaires :
int* fct1(int* p)
{
int x, y; // coordonnées de l'élément cherché
//Ici, tu fais les opérations nécessaires pour récupérer
//x et y, les coordonnées de l'élément tab[x][y]
return &tab[x*taille_dim_2 + y]; //ta fonction renvoie
//un pointeur vers l'élément cherché
//très important : la fonction ne connais pas la taille de la de la
deuxième dimension. Il faut donc soit la définir globalement, soit la
définir globalement, soit la passer en argument
//Ou bien, comme le signalait luthor, tu utilises à la place de 'int* p', 'int p[][taille_dim_2]', et tu retourne &tab[x][y]
}
Tu n'as plus qu'à récupérer ce pointeur et à le passer à ta deuxième fonction
int main
{
int* ret_fct1;
int tab[X][Y];
ret_fct1 = fct1(tab);
fct2(ret_fct1);
}
Voilà... Essaie quand même de chercher des docs (google : "pointeur
langage c") sur le fonctionnement des pointeurs, leurs avantages et
leurs inconvénients : c'est un outil très utile et même indispensable
(je me demande comment je faisais sans avant... :). Je pense que si tu
comprends exactement ce qu'est un pointeur, ton problème se résoudra de
lui-même.
vdust
Messages postés43Date d'inscriptionjeudi 16 décembre 2004StatutMembreDernière intervention14 mars 2007 30 janv. 2005 à 21:14
bayeto : tout dépend comment ton tableau est créé. Car avec int *p[] ou
int **p, tu passes un tableau de pointeurs. Or, tab[x][y] ne créer pas
de tableau de pointeur, et passer tab créé comme suit (ce que veut
faire loic apparemment)
int tab[10][4]
à la fonction fct1(int *p[]) génère l'erreur suivante :
error C2664: 'fct1' : cannot convert parameter 1 from 'int [10][4]' to 'int *[]'
De plus, dans ton exemple, bayeto, tes lignes se retrouvent séparées en mémoire, ce qui rend leur parcours plus tortueux.