tibob51
Messages postés268Date d'inscriptionvendredi 30 avril 2004StatutMembreDernière intervention13 mai 2013
-
4 mai 2008 à 22:11
Neo_Fr
Messages postés653Date d'inscriptionmardi 6 décembre 2005StatutMembreDernière intervention10 novembre 2014
-
6 mai 2008 à 17:17
Bonsoir a tous, j'ai un problème que je n'arrive pas à comprendre.
Je programme depuis peu sous dev c++, et j'ai une syntaxe que j'utilisai sous borland qui n'est pas acceptée par dev:
voici l'erreur que me renvoi dev:
152 L:\Programation\Mes Programme c++\AlertoRage\main.cpp invalid initialization of non-const reference of type 'char*&' from a temporary of type 'char*' .
voici mon code:
{
char Donnees[2048];
Recup_Donnees(Donnees);// Ligne 152,apparement l'erreur vien d'ici
//reste du code
}
et la déclaration de Recup_Donnees:
void Recup_Donnees(char* &reponse);
Cette syntaxe marchait parfaitement sous borland je l'ai utilisée plusieur fois.
Je ne comprends pas ce qu'est cette erreur.
Quelqu'un pourrait m'aider?
merci
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 4 mai 2008 à 23:52
Non. Il ne s'agit pas du tout de la même chose.
L'équivalent de char *& est char **.
Ceci dit, on ne peut pas faire passer un tableau pour l'adresse d'un pointeur pour la raison qu'un tableau est qu'une zone mémoire accessibles via un index.
tab == &tab[0];
Ce n'est pas un pointeur en tant que tel.
Je ne vois pas trop comment expliquer alors pour faire simple, je vais essayer de vulgariser un peu:
Un pointeur est une variable stockant l'adresse d'une zone mémoire.
Un tableau est une zone mémoire.
Quand une fonction demande un char ** par exemple, c'est pour, généralement, modifier l'adresse où pointe un pointeur.
Mais un tableau est déjà une zone mémoire. Impossible de modifier son emplacement.
Je ne sais pas si c'était clair. Comme je l'avais déjà dis, je suis assez nul pour expliquer ce genre de chose.
tibob51
Messages postés268Date d'inscriptionvendredi 30 avril 2004StatutMembreDernière intervention13 mai 20132 5 mai 2008 à 01:21
Heu je patoge un peu dans ton explication (faut le temps que ça monte au cerveau surtout a cette heure-ci ), donc en faite si j'ai bien compris c'etais l'adresse de mon pointeur que ma fonction récuperrai et non pas la valeur de Données?!
j'expose juste mon résonement merci de me reprendre là ou je me plante:
reponse pointe sur Donnees qui est un tableau de caractères dans lequel je vais écrire.
je pense que je dit une connerie là!!!
PS:
par contre ce que je n'arrive pas du tout a comprendre c'est pourquoi
quand je faisait ça avec borland il n'y avait aucun problème?
Merci pour votre aide a tous les deux.
Vous n’avez pas trouvé la réponse que vous recherchez ?
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 5 mai 2008 à 03:19
Aucune idée pourquoi ça fonctionnait avec Borland. Peut-être en faisait-il un pointeur je sais pas.
Ce que je dis c'est qu'un pointeur, on peut extraire son adresse, car c'est une variable. Pas un tableau, car c'est une zone mémoire. L'adresse que l'on obtient quand on fait &tab correspond à l'adresse de sa première case (&tab[0]). Ce n'est pas un pointeur, c'est un emplacement mémoire.
En ultra simple et résumé : on peut modifier où pointe un pointeur mais pas un tableau. Voilà.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 5 mai 2008 à 03:23
Je peux déduire que si tu as accepté la réponse de neo_fr, c'est que ta fonction Recup_Donnees ne fait qu'une copie dans un buffer.
Si c'est le cas, tu n'avais pas du tout besoin de référence.
tibob51
Messages postés268Date d'inscriptionvendredi 30 avril 2004StatutMembreDernière intervention13 mai 20132 6 mai 2008 à 09:07
Ben non et c'est bien ça que je ne comprend pas j'avais bel et bien besoin d'un reference, ce n'est pas une copie dont j'ai besoin, mais Recup_Donnees doit me charger la variable que je lui passe par référence,là j'avoue ne plus trop comprendre!