Чистый C: копировать строки и столбцы 2D-массива с помощью указателей - PullRequest
0 голосов
/ 16 апреля 2019

Предполагая, что я инициализировал массив int, используя двойной указатель

int **array;

Я использовал malloc, чтобы получить желаемый размер массива, подобный этому

array = malloc( sizeof *array * ROWS );
if ( array ){
    for ( size_t i = 0; i < ROWS; i++ )
        *(array  + i) = malloc( sizeof *(*(array  + i)) * COLS );
}

Каждый индекс массива объявляется со случайным числом int. Я пытаюсь найти более быстрый способ скопировать строку или столбец, а не использовать для циклов. Мой выбор - использовать memcpy, с самого начала это выглядело как хорошая идея, так как у меня не было проблем с копированием строки с использованием

memcpy((array + 1), (array + 3), (int)sizeof(int **));

Однако, когда дело доходит до столбцов, использующих

memcpy(*(array + 1), *(array + 3), (int)sizeof(int *));

на самом деле не работает, как я ожидал, и был скопирован только один элемент. Есть что-то, чего мне не хватает?

1 Ответ

3 голосов
/ 16 апреля 2019

Для двумерного массива, если ваши строки непрерывно размещаются в памяти (или массив основных строк), столбцы не будут непрерывными.

memcpy, с другой стороны, копии только непрерывныекуски памяти.Следовательно, вы не можете скопировать весь столбец одним вызовом memcpy.Вам скорее нужно будет скопировать каждый элемент по одному, для чего вам не нужно memcpy.

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