纯C:使用指针复制2D数组的行和列

时间:2019-04-16 15:31:05

标签: c arrays pointers

假设我已经使用双指针初始化了一个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数声明。 我试图找到一种更快的方法来复制行或列,而不是使用for循环。我的选择是使用memcpy,一开始它似乎是个好主意,因为我使用

复制行没有问题
memcpy((array + 1), (array + 3), (int)sizeof(int **));

但是,涉及到使用列

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

实际上没有按我预期的那样工作,仅复制了一个元素。有什么我想念的吗?

1 个答案:

答案 0 :(得分:3)

对于2D数组,如果您的行在内存中连续排列(又称行为主的数组),则列将不连续。

另一方面,

memcpy仅复制连续的内存块。因此,仅通过一次调用memcpy就不能复制整个列。您宁愿一个一个地复制每个元素,而无需memcpy