Bonjour,
J'ai essayé de corriger cet exercice en c mais j'ai trouvé une différence entre l'exécution à la main et l'exécution en utilisant VS
Le code
le problème est lorsqu'on applique la fonction f2, normalement ptr2 prend l'adresse de G1 mais lors de l'exécution avec VS elle a gardé la même adresse.
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 #include "stdafx.h" #include <stdio.h> int G1 = 1, G2 = 2, G3 = 3; int ptr1=&G1, ptr2=&G2, *ptr3=&G3; void f1(int a, int b) { a = b; } int f2(int *b, int c) { *b = c; b = &G1; return *b; } int tmain(int argc, TCHAR* argv[]) { int NoLig = 1; f1(G1, ptr2); printf("No ligne : %d G1 = %d G2 = %d G3 = %d\n", NoLig++, G1, G2, G3); (*ptr1)++;(*ptr2)++;(*ptr3)++; printf("No ligne : %d G1 = %d G2 = %d G3 = %d\n", NoLig++, G1, G2, G3); f2(ptr2, *ptr3); printf("No ligne : %d G1 = %d G2 = %d G3 = %d\n", NoLig++, G1, G2, G3); (*ptr1)++;(*ptr2)++;(*ptr3)++; printf("No ligne : %d G1 = %d G2 = %d G3 = %d\n", NoLig++, G1, G2, G3); return 0; }
L'exécution en utilisant VS
L'exécution à la mainNo ligne : 1 G1 = 1 G2 = 2 G3 = 3
No ligne : 2 G1 = 2 G2 = 3 G3 = 4
No ligne : 3 G1 = 2 G2 = 4 G3 = 4
No ligne : 4 G1 = 3 G2 = 5 G3 = 5
No ligne : 1 G1 = 1 G2 = 2 G3 = 3
No ligne : 2 G1 = 2 G2 = 3 G3 = 4
No ligne : 3 G1 = 2 G2 = 4 G3 = 4
No ligne : 4 G1 = 4 G2 = 4 G3 = 5
Partager