begin process at 2010 02 09 23:24:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Système

 > 

Autre

 > 

New pour argument formel


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

New pour argument formel

lundi 16 octobre 2006 à 13:12:28 | New pour argument formel

goutbouyo

Membre Club
Salut,
J'ai une petite question concernant les pointeurs :

J'ai une fonction qui alloue de la mémoire à un pointeur passé en paramètre :
void CreeTableau(int *tab)
{
    tab = new int[10];
    tab[0]=5;  
}
Et ma fonction main() :
int main()
{
    int *myTab=0;
    CreeTableau(myTab);
    cout << "mytab : " << myTab[0];
    return 0;
}

Pouvez vous me dire pourquoi la mémoire est allouée pour la varianle locale tab mais pas pour la variable passée en paramètre myTab ???

Merci d'avance !!!
lundi 16 octobre 2006 à 13:43:05 | Re : New pour argument formel

mad_love_disease

Réponse acceptée !
Yo goutbouyo,

C'est tout simplement parceque le paramètre int *tab est passé "par copie" dans ta fonction CreeTableau. Ton tableau est bien alloué, mais tu ne récupere pas son adresse. Essaye plutot:

int * CreeTableau()
{
    int * tab = new int[10];
    tab[0]=5;  
    return tab;
}
Et ma fonction main() :
int main()
{
    int *myTab=0;
    myTab =  CreeTableau(myTab);
    cout << "mytab : " << myTab[0];
    return 0;
}


Mad_Love_Disease
lundi 16 octobre 2006 à 14:21:10 | Re : New pour argument formel

buno

En règle générale, il vaut mieux éviter de passer un pointeur vers une fonction qui s'occupe de l'allocation. Si on ne peut pas faire autrement, ne pas oublier la fonction de désallocation!!!
NB: dans le copier-coller de Mad_love_disease, il y a une erreur: pas d'argument à la fonction CreeTableau()
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
lundi 16 octobre 2006 à 15:05:03 | Re : New pour argument formel

mad_love_disease

yep, dsl...

Mad_Love_Disease
lundi 16 octobre 2006 à 17:46:54 | Re : New pour argument formel

goutbouyo

Membre Club
Ok merci j'ai compris maintenant.
Et si j'utilise le passage par réference en remplaçant :
void CreeTableau(int *tab)
{
    tab = new int[10];
    tab[0]=5;  
}
par
void CreeTableau(int &*tab)
{
    tab = new int[10];
    tab[0]=5;  
}

Ca marche là non???
lundi 16 octobre 2006 à 20:24:07 | Re : New pour argument formel

luhtor

Oui ca marche.
Ya aussi cette variante pour le C:

void CreeTableau(int **tab)
{
    *tab = new int[10];
    (*tab)[0]=5;  
}

lundi 16 octobre 2006 à 20:25:42 | Re : New pour argument formel

luhtor

Oups pardon, j'ai dis ca marche alors que non ca marche pas.

void CreeTableau(int &*tab) <= incorrect, et ca n'a aucun sens. un pointeur sur une référence ? ?

par contre, ca ca marche:

void CreeTableau(int * & tab)
lundi 16 octobre 2006 à 20:36:32 | Re : New pour argument formel

goutbouyo

Membre Club
void CreeTableau(int &*tab) <= incorrect, et ca n'a aucun sens. un pointeur sur une référence ? ?
Ca serait pas plutôt une référence sur un pointeur ça ???

Donc en clair, avec une référence, je fait ça:
void CreeTableau(int &*tab)
ou :
void CreeTableau(int *&tab)


lundi 16 octobre 2006 à 20:40:43 | Re : New pour argument formel

goutbouyo

Membre Club
En fait le but est d'allouer dynamiquement un tableau à 2 dimensions dans une fonction.
Comment faire donc avec le tableau passé en argument ???
lundi 16 octobre 2006 à 21:04:04 | Re : New pour argument formel

luhtor

Réponse acceptée !
Bien sur que non: void CreeTableau(int &*tab) c'est un pointeur sur une référence.
void CreeTableau((int *) & tab)  <= ca, c'est la forme correct

typedef int* pint;
void CreeTableau(pint & tab) <= ca choque peut etre moins comme ca.

(int*) c'est un type a part entière. Donc tu envois une référence comme pour n'importe quel type
void function(TYPE & _reference);

que TYPE = int * ou TYPE = int, ca change rien.




1 2

Cette discussion est classée dans : int, tab, argument, formel, mytab


Répondre à ce message

Sujets en rapport avec ce message

lire dans un fichier [ par skeul ] Bonjour,je rencontre qqs difficultés a faire une fonction qui lit un fichier et qui rentre la chaine de caractere dans un tableauy a comme un probleme Pb Tableaux et initialisation. [ par AstraDeon ] Bonjour,Voila je tentais une simple initinitialisation d'un tableau bidimensionnel, mais j'ai pas le resultat escomptsS, voici le code :#include int m Argument argv[] en (int) [ par thebigbang ] Bonjour,Je cherche comment récupérer une variable entière à partir de la cette fonction main() :int main(int argc, char * argv[] ){...return 0;}Je vou 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 Blem Somme ELmt d'un Tableau Bidimensionnel [ par Orezza ] Slt c encore moi, le boulet de l'info...c tjrs le meme prog mais cette fois ci j'aimerais afficher la somme des elmts de mon tableaux.#include #includ Mais Pkoi un erreur ?! [ par Orezza ] OrezzaBonjour voila encore une de mes sources Bidon, je le sais je debute mais pkoi mon compilateur indique une erreur je ne vois vraiment pas.je vous GetAsyncKeyState [ par sebleboss2002 ] Bon, c'est encore moi, ce coup-ci, j'ai trouvé (plus ou moins) comment faire ce que je voulais :#include #include <br Algo trop lent :( [ par MoDDiB ] Bon tout d'abord je tient à préciser qu'il s'agit du concours prologin auquel je compte participer donc si certaines personnes ne veulent pas m'aider tableau char [ par dingue007 ] Voila je dois faire un prog en C++ : un tableau avec les mois de lannée et quand je tape un chiffre il me sort le mois ! mais je narrive pas a faire l Mon code ne marche pô ! [ par xavier59 ] Mon code ne marche pas !Merci de m'aider !!!**************************************************# include # include int main(){ int tab[5]; int i; int t


Nos sponsors


Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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,296 sec (3)

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