Рубрики

C | Массивы | Вопрос 9

Прогнозируем вывод следующей программы:

#include <stdio.h>
#define SIZE(arr) sizeof(arr) / sizeof(*arr);

void fun(int* arr, int n)

{

    int i;

    *arr += *(arr + n - 1) += 10;

}

  

void printArr(int* arr, int n)

{

    int i;

    for(i = 0; i < n; ++i)

        printf("%d ", arr[i]);

}

  

int main()

{

    int arr[] = {10, 20, 30};

    int size = SIZE(arr);

    fun(arr, size);

    printArr(arr, size);

    return 0;

}

(А) 20 30 40
(Б) 20 20 40
(С) 50 20 40
(D) Ошибка времени компиляции

Ответ: (с)
Пояснение: Суть вопроса заключается в выражении: * arr + = * (arr + n — 1) + = 10; Составной оператор (здесь + = ) имеет ассоциативность справа налево. Первые 10 добавляются к последнему элементу массива. Результат затем добавляется к первому элементу массива.
Тест на этот вопрос

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

C | Массивы | Вопрос 9

0.00 (0%) 0 votes