Bonjour à tous,
Voilà je suis confronté à un petit problème: dans les blocs d'accolades, on est d'accord que les variables créées sont temporaires (elles disparaissent à la fin du bloc)?
Voici 2 codes très simples qui me chiffonnent:
Me donne la sortie suivante (normal, j'ai envie de dire):
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 #include <stdio.h> #include <iostream> using namespace std; int ajoute(int & d){ int k = d+1; if(k == 3){ int e = 3; cout << d << endl; } cout << d << endl; } int main(){ int d = 2; ajoute(d); return 0; }
Maintenant celui-ci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 2 2
Me donne la sortie :
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 #include <stdio.h> #include <iostream> using namespace std; int ajoute(int & d){ int k = d+1; if(k == 3){ int d = 3; //cette variable a le même nom que l'argument que la fonction a recu! cout << d << endl; } cout << d << endl; } int main(){ int d = 2; ajoute(d); return 0; }
Le probleme, c'est donc que dans ce bloc "if{...]", je ne peux plus avoir accès à l'argument de la fonction ajoute(). Et puis même, comment le compilateur fait pour ne pas s'emmeler les pinceaux?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 3 2
Bizarre, bizarre, vous avez une explication?
Partager