2D массив, где больший массив является динамическим, а меньшие массивы не являются - PullRequest
0 голосов
/ 21 сентября 2019

В C, если я не знаю количество строк во время компиляции, но знаю количество столбцов, как мне инициализировать массив?

Если я хочу, чтобы динамически размещалосьмассив, я набираю int 2D_array[128][128];, но если я хочу динамически распределенный массив, я набираю

int** 2D_array = (int**)calloc(num_rows, sizeof(int*));
for (int i = 0; i < num_rows); i++) {
   2D_array[i] = (int*)calloc(num_columns, sizeof(int));
}

Но что, если я хочу иметь двумерный массив, где строки являются динамическими, а столбцы - нет?Моя интуиция int* 2D_array[128];, но это просто даст мне двумерный массив со 128 строками и динамически размещенными столбцами.

Ответы [ 2 ]

1 голос
/ 21 сентября 2019

Здесь вы пытаетесь получить доступ к 2D_array [row] [column].Вы можете получить доступ к любому значению столбца только через после ссылки на адрес строки. Так что, если мы изменим как 2D_array [column] [row], это возможно.Но нам нужно изменить логику доступа к значениям массива в оставшемся приложении.

1 голос
/ 21 сентября 2019

Вы можете выделить всю вещь одновременно.typedef облегчает указание объявления массива.

typedef int[128] row;
row *twoD_array = calloc(num_rows, sizeof(row));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...