假设我已经使用双指针初始化了一个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 *));
实际上没有按我预期的那样工作,仅复制了一个元素。有什么我想念的吗?
答案 0 :(得分:3)
对于2D数组,如果您的行在内存中连续排列(又称行为主的数组),则列将不连续。
另一方面, memcpy
仅复制连续的内存块。因此,仅通过一次调用memcpy
就不能复制整个列。您宁愿一个一个地复制每个元素,而无需memcpy
。