Рубрики

Выход программы C | Набор 23

Прогнозировать выход следующей программы C.

#include <stdio.h>
#define R 4
#define C 4

  

void modifyMatrix(int mat[][C])

{

   mat++;

   mat[1][1] = 100;

   mat++;

   mat[1][1] = 200;

}

  

void printMatrix(int mat[][C])

{

    int i, j;

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

    {

        for (j = 0; j < C; j++)

            printf("%3d ", mat[i][j]);

        printf("\n");

    }

}

  

int main()

{

    int mat[R][C] = { {1, 2, 3, 4},

        {5, 6, 7, 8},

        {9, 10, 11, 12},

        {13, 14, 15, 16}

    };

    printf("Original Matrix \n");

    printMatrix(mat);

  

    modifyMatrix(mat);

  

    printf("Matrix after modification \n");

    printMatrix(mat);

  

    return 0;

}

Вывод: программа прекрасно компилируется и выдает следующий вывод:

Original Matrix
  1   2   3   4
  5   6   7   8
  9  10  11  12
 13  14  15  16
Matrix after modification
  1   2   3   4
  5   6   7   8
  9 100  11  12
 13 200  15  16

На первый взгляд строка «mat ++;» в modifyMatrix () кажется неверной . Но это допустимая строка C, поскольку параметры массива всегда указатели (см. Это и это для деталей). В modifyMatrix () mat — это просто указатель, указывающий на блок размера C * sizeof (int) . Таким образом, следующий прототип функции такой же, как «void modifyMatrix (int mat [] [C])»

void modifyMatrix(int (*mat)[C]);

Когда мы делаем mat ++, mat начинает указывать на следующую строку, а mat [1] [1] начинает ссылаться на значение 10. mat [1] [1] (значение 10) изменяется на 100 с помощью выражения «mat [1] [ 1] = 100; » . mat снова увеличивается, и mat [1] [1] (теперь значение 14) изменяется на 200 следующей парой операторов в modifyMatrix () .

Строка «mat [1] [1] = 100;» действительна, поскольку арифметика указателя и индексация массива эквивалентны в C.

Кстати, мы не можем использовать mat ++ в main (), так как mat — это двумерный массив в main () , а не указатель.

Пожалуйста, напишите комментарии, если вы нашли выше ответ / объяснение неверно, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше

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

Выход программы C | Набор 23

0.00 (0%) 0 votes