1 pièce(s) jointe(s)
Passage par référence d'un pointeur
Bonjour,
Je suis en train d'écrire un programme pour tester et comprendre différentes manières de passer des arguments à des fonctions.
L'une d'entre elles consiste à passer en argument une référence de pointeur.
Voici mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
#include <iostream>
// Passage par pointeur
void fctn1(int* arg1)
{
(*arg1)++;
// *arg1 = *arg1 + 1;
}
// Passage par référence
void fctn2(int& arg2)
{
arg2++;
}
// passage par référence d'un pointeur
void fctn3(int*& arg3)
{
int tab[] = {4, 5, 6};
std::cout << "*tab = " << *tab << "\n";
arg3 = tab;
std::cout << "*arg3 = " << *arg3 << "\n";
}
// Passage d'un pointeur de pointeur (plutôt en C)
void fctn4(int** arg4)
{}
// Affiche tableau
void display_tab(const int* tab, const int size)
{
for(int i = 0 ; i < size ; i++)
std::cout << tab[i] << "\t";
std::cout << "\n";
}
int main()
{
int arg1 = 6;
std::cout << "arg1 = " << arg1 << " \n";
std::cout << "Appel fctn1 : passage par pointeur \n";
int* ptr_arg1 = &arg1;
fctn1(ptr_arg1);
std::cout << "arg1 = " << arg1 << " \n";
std::cout << "Appel fctn2 : passage par référence \n";
fctn2(arg1);
std::cout << "arg1 = " << arg1 << " \n";
std::cout << "Appel fctn3 : passage par référence d'un pointeur \n";
int tab[] = {7, 8, 9};
int* k = tab;
display_tab(k, 3);
fctn3(k);
std::cout << "*k = " << *k << "\n";
display_tab(k, 3);
std::cout << "Appel fctn4 : passage par pointeur d'un pointeur \n";
return 0;
} |
J'ai cru comprendre qu'avec ce genre de méthode, on pouvait initialement déclarer un pointeur sur un tableau et modifier dans la fonction le pointeur afin qu'il pointe sur un nouveau tableau.
Mon code compile mais je ne comprends pas les sorties consoles que voici :
Pièce jointe 642428
En effet à l'intérieur de ma fonction fctn3 je comprends les différents "prints" que j'obtiens et mon pointeur pointe bien vers le premier élément du tableau.
Cependant dès que je sors de la fonction, j'ai l'impression que le pointeur pointe vers ailleurs... et idem pour les autres valeurs ... :(
Et ça comme si la "bonne référence" n'avait pas été transmise lors de la sortie de la fonction.
Pouvez-vous m'expliquez pourquoi s'il vous plaît ? :question: