|
|
|
|
Bonjour,
Je m'en remet aux experts, parceque là je sèche...
j'ai une fonction :
void f(char* ch=0)
{
ch=new char[6];
strcpy(ch,"essai");
}
char* ch="abcde"; f(ch);
Il faut signaler que tu veux updater et donc reprendre la nouvelle valeur dans ton main, sinon, comme tu as peu le voir, la valeur dans le main ne changera pas pour ta variable 'ch', mais uniquement en local, dans ta fonction.
char* ch="abcde"; f(&ch); Mais je crois qu'en C++ les pointeurs sont gérés différemment non ? En tout cas ton erreur viens de là, essai ca avec des sorties et ca devrait aller mieux. ~ iclic @ gauch,iclic, iclic @ droate, iclic, iclic et ya pas de bôg môsieu ! ~ |
Salut.
|
J'ai trouvé la solution !
|
Rappels sur les const
#include <string>
void f(std::string & s=""){
s = "essai";
}
Références et pointeurs A noter que en C et en C++ les paramètres sont des recopies. - un passage par pointeur va consister à empiler l'adresse de la variable pointée. Cette adresse est recopiée en mémoire mais pas la zone pointée. C'est pour ça qu'en C / C++ on utilise des pointeurs ou des références pour modifier la valeur d'un paramètre (plus exactement la valeur d'une variable pointée par un paramètre). - on doit au maximum utiliser les références pour que le programme ne perde pas du temps à recopier inutilement des paramètre. Par exemple si je manipule un graphe de grande taille : void f(graph_t & g); // rapide void g(graph_t * g); // rapide void h(graph_t g): // lent !!! car on recopie le graphe à chaque appel de h Et les const... Il faut par ailleurs veiller à bien mettre les const (cf début du post) quand ils sont justifiés. Typiquement :
#include <string>
#include <iostream>
void affiche(std::string & s){
std::cout << s << std::endl;
}
void affiche2(const std::string & s){
std::cout << s << std::endl;
}
int main(){
const std::string s = "plop";
affiche(s); //erreur de compilation car affiche de garantit pas la constance
affiche2(s); //ok
return 0;
}
Bonne chance |