/* IFT1166 - démonstration #6 - exercice 4 14-octobre -2005 v1.01 M.Lokbani MàJ pour A05 à partir de examen Intra H2000 Q3-2+ gcc3.4.2, +comments 16-février -2000 v1.00 M.Lokbani Examen Intra H2000, Question 3-2. contact: lokbani@iro.umontreal.ca Cette démonstration a pour but de vous donnez quelques astuces de programmation. Copyright (C) 2000-2005 Université de Montréal Département d'informatique et de Recherche Opérationnelle Mohamed Lokbani -- Tous Droits Réservés -- All Rights Reserved -- */ #include using namespace std; void f(int& x, int* y) { x += 20; *y -= 10; } void f(int* x, int y) { *x += 20; y -= 10; } int main() { int x = 8; int y = 9; f(x,&y); cout << x << ' ' << y << endl; f(&y,x); cout << x << ' ' << y << endl; return 0; } /* opérations int x=8; x déclaré dans le main x vaut 8 int y=9; y déclaré dans le main y vaut 9 f(x,&y) appel de f(int &x,int *y) x est passée par référence. Toute opération sur x de f est en réalité sur x de main. x+=20; x=8; x= x+20; x = 8+20; x=28; y est passée par pointeur. Toute opération sur y de f est en réalité sur y de main. y-=10; y=9; y= y-10; y = 9-10; y=-1; fin de f(x,y) et retour a main x=28 y=-1 cout << x << ' ' << y << endl; affichage: 28 -1 x déclaré dans le main vaut maintenant 28 y déclaré dans le main vaut maintenant -1 f(&y,x) appel de f(int *x, int y) x est passée par valeur en tant que y. Toute opération sur y de f ne va modifier la valeur de x de main. x+=20; x=-1; x= x+20; x = -1+20; x=19; y est passée par pointeur en tant que x. Toute opération sur x de f est en réalité sur y de main. y-=10; y=28; y= y-10; y = 28-10; y=18; fin de f(y,x) et retour a main x=28 y=19 cout << x << ' ' << y << endl; affichage: 28 19 */