Как использовать указатели для массивов массивов char? - PullRequest
2 голосов
/ 12 мая 2019

Я пишу программу, которая заполняет массив массива char.Как использовать указатели вместо передачи всего массива массива char в аргумент функции.

См. Следующий код:

#define COLUMN 20
#define ROW 10

void fillArray(char array[][COLUMN], char c)
{
    int i = 0, j;
    for (; i < ROW; i++)
        for (j = 0; j < COLUMN; j++)
            array[i][j] = c;
}

int main()
{
    char array[ROW][COLUMN];
    fillArray(array, '*');
}

Есть ли способ использовать указатели вместо передачи всего массива массива char в первый аргумент функции 'fillArray'?

1 Ответ

5 голосов
/ 12 мая 2019

Есть ли способ использовать указатели

Да, делая это точно так, как вы это делаете.: -)

Это объявление

void fillArray(char array[][COLUMN], char c)

фактически идентично

void fillArray(char (*array)[COLUMN], char c)

2-я версия говорит вам, что array определяется как указатель намассив COLUMN char с.

Общее правило:

Когда массив передается в функцию, он распадается на указатель на свой 1-й элемент.* 1

Поэтому, когда в main() вы передаете array в fillArray(), тогда array затухает в указателе a char[COLUMN], в char(*)[COLUMN].


* 1 И наоборот, это означает, что в C невозможно передать « весь массив » непосредственно в функцию.Это может быть достигнуто только путем упаковки массива в struct.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...