2011 – 2

È dato il seguente programma:

#include 

int x,y;

void alfa(int *x, int y) 
{
   y=*x*y; 
   *x=*x*y;
}
void beta(int *x, int y) 
{
   *x=*x*y; 
   y=*x*y;
}

main() 
{
   x=3; 
   y=3; 
   alfa(&x, y);
   printf("x=%d y=%d", x, y);
   x=3; 
   y=3; 
   beta(&x, y);
   printf(" x=%d y=%d\n", x, y);
}

Cosa viene visualizzato a video dall’esecuzione di main()?

  1. x=9 y=3 x=27 y=3
  2. x=27 y=3 x=9 y=3
  3. x=27 y=3 x=27 y=3
  4. x=27 y=3 x=9 y=9

Soluzione: b (x=27 y=3 x=9 y=3)


Sia in alfa() che in beta() i parametri sono passati con modalità diverse (x per riferimento, y per valore)

In alfa()

  • y = *x * y = 3 * 3 = 9
  • *x = *x * y = 3 * 9 = 27

e nel main()

  • x=27
  • y=3

In beta()

  • *x = *x * y = 3 * 3 = 9
  • y = *x * y = 9 * 3 = 27

e nel main()

  • x=9
  • y=3