【发布时间】:2020-03-16 04:25:40
【问题描述】:
我有一个这样的数组:
double **Arr = malloc(N*sizeof(double*));
for(int j = 0; j < N-1; j++)
Arr[j] = malloc(M*sizeof(double))
这些数组充满了值。我想移动一些数组(最后的 N-i 个)。这两行有什么区别吗?
for(int j = i; j < N-1; j++)
for(int k = 0; k < M; k++)
Arr[j][k] = Arr[j+1][k];
或
memmove(&(Arr[i]), &(Arr[i+1]), (N-1-i)*sizeof(double*));
【问题讨论】:
-
你没有数组数组,你有一个指针数组。想想复制数组元素和复制指针的区别。
-
memmove 基本上是 memcpy,但它允许
src和dest指针之间重叠(这意味着它也会更慢)。 -
@molbdnilo 他没有指针数组,他有一个指向指针的指针。
-
考虑使用
double (*arr)[M] = malloc( sizeof(double[N][M]) );,然后使用memcpy(arr[i], arr[i+1], sizeof(double[M]));。它对缓存更友好,也更容易阅读。 -
@FlorianAubin 将您的 C 编译器更新为本世纪推出的标准编译器,您可以。