begin process at 2012 05 29 22:55:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Langage C: Problème de retour de Pointeur dans une fonction


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Langage C: Problème de retour de Pointeur dans une fonction

samedi 29 janvier 2005 à 15:29:48 | Langage C: Problème de retour de Pointeur dans une fonction

loic911

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
samedi 29 janvier 2005 à 17:27:19 | Re : Langage C: Problème de retour de Pointeur dans une fonction

luhtor

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

void main
{
int tab[10][4];
fct1 (tab);
fct2 (tab);
}




samedi 29 janvier 2005 à 22:27:12 | Re : Langage C: Problème de retour de Pointeur dans une fonction

vdust

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.

bye !

-- Virtual Dust --

samedi 29 janvier 2005 à 22:50:09 | Re : Langage C: Problème de retour de Pointeur dans une fonction

bayeto

Membre Club
Mouais mais pour un tableau à deux dimensions je prefere un truc du genre:
void foo(int **tab); ou void foo(int *tab[]);

void fct1 (int *p[])
{
  //faire des trucs avec p[] ou meme p[][];
}
dimanche 30 janvier 2005 à 21:14:41 | Re : Langage C: Problème de retour de Pointeur dans une fonction

vdust

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.


-- Virtual Dust --



Cette discussion est classée dans : fonction, exemple, tab, pointeur, endroit


Répondre à ce message

Sujets en rapport avec ce message

Exemple de EnumPrinters (qui fonctionne) en C++ [ par nico ] Je voudrais que mon programme puisse détecter l'imprimante par défaut utilisée par mon PC. Pour ce faire j'ai trouvé la fonction "EnumPrinters". Le pr Fonction atoi [ par LordBob ] Salut, en fait je voudrai savoir si la fonction atoi permet bien de transformé une chaine de caractere entré par un utilisateur par exemple en son eq probleme avec la fonction GetAsyncKeyState() [ par aardman ] Bonjours,Je débute dans le c, et j'ai un petit probleme avec cette fonction.Je n'arrive pas a la faire fonctionner avec un int comme argument. Par exe fonction d'alloaction dynamique [ par tomsawyerbelgique ] Pour une allocation dynamique d'un tableau à deux dimensions. Comme celle ci:cout // Initalisation int** tab = new int*[p_size1_tab]; for(in Saisir une touche clavier (besoin d aide :) ) [ par vychnou ] Bonjour..je débute en C++, et j'aimerais trouver un moyen(par exemple une fonction)permettant ,sans passer par un cin ,d attendre la saisie d une touc ReadProcessMemory [ par ymca2003 ] Salut,J'essaye d'utiliser la fonction ReadProcessMemory pour lire le contenu de la mémoire d'un processus mais je n'y arrive pas.Lorsque j'appel cette appeler un tableau... [ par ilimo ] bonjour,voici mon probleme :1- j'ai 3 classes : a, b, c2- classe "a" contient un tableau de pointeur sur pointeur de classe "b" : b **tab;3- j'initial Problème de pointeur [ par sebastienbro ] Bonjour,G une fonction ki a comme argument un pointeur vers un struct personnalisé.J'aimerais savoir commen je peu faire pour modifier lé éléments de pointeur de fonction [ par Larwin ] salut tout le mondebon j'suis un gros débutant c/c++ et je fais mes premiers pas depuis 2, 3 jours...j'ai deja un petit probleme :)je m'explique :j'ai Pointeur sur fonction envoyé par dll [ par MoDDiB ] Voila ce que j'ai fais mais ca ne marche pas :Dll :#include BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved){ retu


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,406 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales