Рубрики

ВОРОТА | GATE-CS-2003 | Вопрос 90

Consider the C program shown below.

#include <stdio.h>
#define print(x) printf("%d ", x)

int x;

void Q(int z)

{

    z += x;

    print(z);

}

void P(int *y)

{

    int x = *y + 2;

    Q(x);

    *y = x - 1;

    print(x);

}

main(void)

{

    x = 5;

    P(&x);

    print(x);

}

The output of this program is

(А) 12 7 6
(Б) 22 12 11
(С) 14 6 6
(D) 7 6 6

Ответ: (А)
Объяснение: x является глобальным, поэтому первый x становится 5 по первой строке в main (). Затем main () вызывает P () с адресом x.

// in main(void)

x = 5 // Change global x to 5
P(&x)

P () имеет локальную переменную с именем 'x', которая скрывает глобальную переменную. P () theb вызывает Q (), передавая значение локального 'x'.

// In P(int *y)

int x = *y + 2; // Local x = 7
Q(x);

В Q (int z) z использует x, который является глобальным

// In Q(int z)

z += x; // z becomes 5 + 7 
printz(); // prints 12

После завершения Q () управление возвращается к P (). В P (), * y (y — адрес глобального x) изменяется на x — 1 (x локально для P ()).

// Back in P()

 *y = x - 1; // *y = 7-1
 print(x); // Prints 7

После завершения Q () управление возвращается к main (). В main () печатается глобальный x.

// Back in main()

print(x); // prints 6 (updated in P()
          //           by *y = x - 1 )

Тест на этот вопрос

Рекомендуемые посты:

ВОРОТА | GATE-CS-2003 | Вопрос 90

0.00 (0%) 0 votes