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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Mon code compile mais je ne comprends pas les sorties consoles que voici :
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 ?![]()
Partager