Arguments : adresse ou pointeur ?

[Résolu]
Signaler
Messages postés
79
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
8 décembre 2006
-
Messages postés
79
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
8 décembre 2006
-
Bonjour, j'aimerai savoir s'il est préférable de passer en arguments d'une fonction (ou d'une méthode) des pointeurs ou bien des adresses... Je ne vois pas trop la différence en fait.
Merci !
Vincent

10 réponses

Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
un pointeur (*), c juste un int qui contient une adresse memoire.
par exemple, si tu fais
int x = 25;
char y = (*((char*)x))
alors il ira lire y dans l'adrese memoire 25 (attention c juste un exemple, faut surtout pas faire ca !!!)
Donc, pour acceder a une zone memoire par un pointeur, ton pc lit un int, va a ladresse qui correspond et lit ta valeur. en gros en assembleur je pense que ca correspond à 2 instructions MOV, donc autant dire que ca coute pas trop cher
Par contre, j'ai aucune idee de comment fonctionne la reference. A priori, je dirai que que c basé sur un pointeur, sauf que tu as pas besoin de mettre une "->" mais un "." , et que tu est oblige de linstancier a la declaration. sinon je pense que c'est kif kif.

Si quelqun sait comment fonctionne une reference, je lui cede la place ...
Messages postés
416
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
19 décembre 2013
2
Excusez - moi , j'aurais bien voulu ajouter , pour clore tout ceci qu'a mon avis
une fonction appelee fct /
void fct(int& a, int& b) == void fct(int* a, int* b) en general
mais la meilleur serait plus explicitement
void fct(int* const a, int* const b);
MErci
je suis heureux de faire partie d'une grande famille ...!
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
12
Oui, evidemment et fort heureusement d'ailleurs.

Un pointeur est une varible qui contient une adresse. Donc on dit souvent qu'un pointeur est une adresse.



Exemple de passage de pointeur:

void mafonction(char *ptr1, int *ptr2)

{

//Ton code

}



Tu remplaces le prototype comme tu veux, autant de param que tu veux, le type que tu veux.

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
Messages postés
79
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
8 décembre 2006

Je me suis sans doute mal exprimé Je voulais savoir s'il valait mieux passer en argument la valeur de l'adresse ou bien un pointeur... donc s'il vaut mieux écrire : 'void fonction(int *a);' ou 'void fonction(int &a);' en fait je veux savoir s'il y a un avantage à la transmission par référence, en particulier au niveau vitesse d'execution (que je dois optimiser à tout prix). Merci
Messages postés
118
Date d'inscription
mercredi 24 décembre 2003
Statut
Membre
Dernière intervention
11 décembre 2011

Salut,

Je pense que par pointeur c'est le mieu personnellement et c'est ce qui est le plus utilisé (je pense)

tchao
Messages postés
79
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
8 décembre 2006

Ok Bob l'éponge, je pense aussi que ca doit être un peu kif kif, juste une commodité d'écriture. Merci bien.
Messages postés
416
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
19 décembre 2013
2
Une reference est une adresse type pointeur constant .
Exemple:
void fonction(int& a);
int a = 0;
fonction(a);

> la fonction ira chercher la reference de a . La reference notee &a qui est un pointeur equivalent a int* const ptr avec ptr adresse de a;

passer une reference , est strictement la meme chose qu'un pointeur normal... a une condition pres , l'utilisation que tu fais de ta fonction : fais des recherches sur les constructeurs copie par reference , et copie complete

je suis heureux de faire partie d'une grande famille ...!
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
a une condition pres , l'utilisation que tu fais de ta fonction : fais
des recherches sur les constructeurs copie par reference , et copie
complete

heuuuu keske t'entend par la nickydaquick ? tu veu dire que le comportement peut changer entre un pointeur et une reference si tu fai appel a un constructeur dans la fonction appellée???
Messages postés
416
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
19 décembre 2013
2
Non , mais que les 2 constructeurs d'une classe , meme si l'implementation peut sembler vouloir dire la meme chose , ne sont pas appeles dans les meme situations. Pour ce qui concerne la fonction , ca marche mais ne prenez surtout pas pour acquis que ces 2 modes se valent partout. :D

je suis heureux de faire partie d'une grande famille ...!
Messages postés
79
Date d'inscription
mardi 29 juillet 2003
Statut
Membre
Dernière intervention
8 décembre 2006

Bien reçu, merci à tous !