假设我已经使用双指针初始化了一个 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 );
}
数组的每个索引都用一个随机整数声明。 我正在尝试找到一种比使用 for 循环更快的方法来复制一行或一列。我的选择是使用 memcpy,一开始它看起来是个好主意,因为我使用
复制行没有问题memcpy((array + 1), (array + 3), (int)sizeof(int **));
但是当涉及到列时使用
memcpy(*(array + 1), *(array + 3), (int)sizeof(int *));
实际上并没有像我预期的那样工作,只复制了一个元素。有什么我想念的吗?
最佳答案
对于二维数组,如果您的行在内存中连续排列(也称为行优先数组),那么您的列将不会连续。
memcpy
,另一方面,只复制连续的内存块。因此,您不能仅通过一次调用 memcpy
来复制整个列。您宁愿需要一个一个地复制每个元素,为此您不需要 memcpy
。
关于c - 纯 C : Copy rows and columns of a 2D array using pointers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55711758/