您尝试的任何方法的速度将取决于许多因素,例如编译器在优化此类操作方面的智能,以及您使用的目标处理器。一些编译器使用指针生成更快的代码,而其他编译器使用数组下标生成更快的代码。找出一种方法是否比另一种更快的最好方法是将它们都编码,运行它们,并计算它们运行所需的时间。这可以使用库定时器函数来完成。您还可以检查生成的汇编语言代码,看看哪个版本生成的代码更紧凑。
你试过的方法,如下图
double *first = A;
double *second = A_new;
first = second;
不起作用,因为语句first = second; 只是将first 指针设置为指向second 数组的开头。实际上没有复制任何数组元素。
在 C 中,一个二维数组在内存中排列,就好像它是一个一维数组,每一行在内存中出现在前一行之后。所以一个小的优化是在单个循环中执行操作,而不是一组嵌套循环,如下所示:
double A[100][100];
double A_new[100][100];
for (i = 0; i < (100 * 100); i++) {
A[i] = A_new[i];
}
这可能比您的原始版本运行得更快,因为只有一个循环和一个循环计数器供程序跟踪。
this 的指针版本如下所示:
double A[100][100];
double A_new[100][100];
double *destination = A;
double *source = A_new;
for (i = 0; i < (100 * 100); i++) {
*destination++ = *source++;
}
正如我之前提到的,您需要对两者都进行编码并对它们进行计时,以找出哪个运行得更快。