Passage par reference d'un tableau c++
Fermé
switch1
Messages postés
57
Date d'inscription
samedi 16 décembre 2000
Statut
Membre
Dernière intervention
17 avril 2009
-
15 janv. 2009 à 23:02
pachap - 30 nov. 2011 à 17:53
pachap - 30 nov. 2011 à 17:53
A voir également:
- Passage par reference d'un tableau c++
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Comment faire un tableau - Guide
- Reference pto - Accueil - Box & Connexion Internet
- Trier un tableau excel - Guide
7 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
16 janv. 2009 à 00:37
16 janv. 2009 à 00:37
Salut,
Dans ton exemple, tu as passé le tableau par adresse, et la taille par valeur.
Pour passer la taille par référence, tu définis int &taille dans le prototype de ta fonction.
Cdlt
Dans ton exemple, tu as passé le tableau par adresse, et la taille par valeur.
Pour passer la taille par référence, tu définis int &taille dans le prototype de ta fonction.
Cdlt
switch1
Messages postés
57
Date d'inscription
samedi 16 décembre 2000
Statut
Membre
Dernière intervention
17 avril 2009
1
16 janv. 2009 à 13:58
16 janv. 2009 à 13:58
oki merci bcp fiddy
bon pr le passage par adresse je n'ai aucun problème
mais ki ce que vous pensez si je fais par exemple comme ceci :
---------------------------c++--------------------------------------
void cherche_min(int &,int &); //prototype de la fonction
int main()
{
int tab[5];
int h=5;
for(int i=0;i<h;i++)
{
cout << "Case ("<<i<<") : \t";
cin >> tab[i];
}
cherche_min(tab[0],h);
return 0;
}
//implémentation de la fonction déclarer au dessus :
void cherche_min(int &tab1,int &l)// on peut pas passer un tableau par reference
{
int imin=0;
int *ptr=&tab1; //on cree un pointeur sur le le element_1_tab
for(int i=1;i<l;i++)
if(ptr[imin]>ptr[i])
imin=i;
cout <<"laaa valeur minimal du tablea est :"<<ptr[imin]<<" Sa position est : "<<imin<<endl;
}
------------------------------------------fin-------------------------------------------------
alors ici jai passer juste la première valeur du tableau.et dans la fonction j'ai crée un pointeur sur ce premier élément et puisque les éléments d'un tableau sont contigues alors je pointe mon pointeur crée sur les elements suivants et ca marche
mais a votre avis est ce que ca résoudre la question : passage d'un tableau par référence
merci de me repondre
bon pr le passage par adresse je n'ai aucun problème
mais ki ce que vous pensez si je fais par exemple comme ceci :
---------------------------c++--------------------------------------
void cherche_min(int &,int &); //prototype de la fonction
int main()
{
int tab[5];
int h=5;
for(int i=0;i<h;i++)
{
cout << "Case ("<<i<<") : \t";
cin >> tab[i];
}
cherche_min(tab[0],h);
return 0;
}
//implémentation de la fonction déclarer au dessus :
void cherche_min(int &tab1,int &l)// on peut pas passer un tableau par reference
{
int imin=0;
int *ptr=&tab1; //on cree un pointeur sur le le element_1_tab
for(int i=1;i<l;i++)
if(ptr[imin]>ptr[i])
imin=i;
cout <<"laaa valeur minimal du tablea est :"<<ptr[imin]<<" Sa position est : "<<imin<<endl;
}
------------------------------------------fin-------------------------------------------------
alors ici jai passer juste la première valeur du tableau.et dans la fonction j'ai crée un pointeur sur ce premier élément et puisque les éléments d'un tableau sont contigues alors je pointe mon pointeur crée sur les elements suivants et ca marche
mais a votre avis est ce que ca résoudre la question : passage d'un tableau par référence
merci de me repondre
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
16 janv. 2009 à 14:18
16 janv. 2009 à 14:18
D'ailleurs dans ta fonction, tu peux même utiliser : (int &)(((int*)&tab)[i]) pour créer une référence à partir du pointeur sur l'adresse de la réference décalé de i*sizeof(int) bytes. Mais vraiment peu clair, et tu utilises quand même un pointeur (le cast).
switch1
Messages postés
57
Date d'inscription
samedi 16 décembre 2000
Statut
Membre
Dernière intervention
17 avril 2009
1
16 janv. 2009 à 11:48
16 janv. 2009 à 11:48
merci bcp et pour passer un tableau par référence est ce que c'est possible ???
je sais ke le passage par adresse est bien apte pr satisfaire les besoins mais juste dans un exercice de classe ou le professeur demande de réaliser deux fonction qui cherche le min max....
1er avec un passage par adresse
2eme avec un passage par référence
alors est ce ke c'est possible de faire passer un tableau par référence si oui comment?
merci de m'aider
je sais ke le passage par adresse est bien apte pr satisfaire les besoins mais juste dans un exercice de classe ou le professeur demande de réaliser deux fonction qui cherche le min max....
1er avec un passage par adresse
2eme avec un passage par référence
alors est ce ke c'est possible de faire passer un tableau par référence si oui comment?
merci de m'aider
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
16 janv. 2009 à 13:40
16 janv. 2009 à 13:40
Le tableau par référence non, ce n'est pas possible. Tu dois passer l'adresse du premier élément.
Si c'était par référence, tu ferais comment pour modifier les cases du tableau ? tab[i] signifie *(tab+i). Et tab+i=5 ne peut pas marcher.
Par contre, ce que tu peux faire, c'est :
void rechercheMax(int *tab, int &max) {
...
max=...
}
Et dans la fonction appelante tu auras la variable max qui sera modifiée puisqu'envoyée par référence à la fonction rechercheMax.
Cdlt
Si c'était par référence, tu ferais comment pour modifier les cases du tableau ? tab[i] signifie *(tab+i). Et tab+i=5 ne peut pas marcher.
Par contre, ce que tu peux faire, c'est :
void rechercheMax(int *tab, int &max) {
...
max=...
}
Et dans la fonction appelante tu auras la variable max qui sera modifiée puisqu'envoyée par référence à la fonction rechercheMax.
Cdlt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
16 janv. 2009 à 14:13
16 janv. 2009 à 14:13
Oui, si tu fais comme ça, tu peux, mais après tu dois utiliser un pointeur. Donc aucun intérêt. Autant passer directement le pointeur.
switch1
Messages postés
57
Date d'inscription
samedi 16 décembre 2000
Statut
Membre
Dernière intervention
17 avril 2009
1
16 janv. 2009 à 14:32
16 janv. 2009 à 14:32
je vous remercie ^^ .
switch1
Messages postés
57
Date d'inscription
samedi 16 décembre 2000
Statut
Membre
Dernière intervention
17 avril 2009
1
16 janv. 2009 à 00:13
16 janv. 2009 à 00:13
aidez svp