Passage d'argument par pointeur

Fermé
Massi - 30 oct. 2017 à 19:47
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 31 oct. 2017 à 09:45
bojour,

commet faire un passage d'argument à une fonction sur c++ qui me calcule et m'affiche le carré d'un nombre ..

j'ai procédé de cette manière :



#include<iostream>

using namespace std ;

int carre(int * p )

{

int resultat;

resultat=(*p)*(*p);

return resultat;

}

int main()

{

// on veut générer une fonction qui calcule le carré d'un nombre et l'affiche

int a; //je déclare une variable "a" et je l'initialise à 4


cout<<" entrer la valeur de a " <<endl;
cin>>a;

int *p=&a;

cout<< "l'adresse de a est : "<<&p<<endl;

int carre( a); // je fait un appel à la fonction carre
int resultat;

cout<< resultat<<endl;

return 0;

}

1 réponse

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 31 oct. 2017 à 09:48
Salut Massi,

comme cela, cela irait mieux :
int resultat = carre(p);
ou
int resultat = carre(&a);
...

en effet :

- comme ta fonction carré a un prototype
int carre(int * p )
, tu dois passer un pointeur sur int à la fonction en argument
- tu déclares une variable resultat dans main, mais tu ne stockes pas la valeur de retour de la fonction dedans, donc tu as une valeur indéterminée

Il faut bien comprendre la notion de portée ou "scope" des variables. Les variables correspondant aux noms que tu définis dans main ont leur propre vie et sont différentes de celles déclarées dans ta fonction, qui sont des variables séparées occupant des espaces mémoire différents et dont la durée de vie ne s'étend que dans le contexte de la fonction. Le fait que tu leur ait donné le même nom que tes variables déclarées dans main ne change rien à l'affaire.

Dal
0