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
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;
}
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.
L'exécution en utilisant VS
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 = 3 G2 = 5 G3 = 5
L'exécution à la main
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