我正在尝试优化代码以在 7 秒内运行。我把它降到了 8,现在我正在尝试使用指针来加速代码。但是当我尝试编译时 gcc 给出了一个错误:
.c:29:警告:来自不兼容的指针类型的赋值 .c:29:警告:不同指针类型的比较缺少强制转换
这是我在尝试使用指针之前所拥有的:
#include <stdio.h>
#include <stdlib.h>
#define N_TIMES 600000
#define ARRAY_SIZE 10000
int main (void)
{
double *array = calloc(ARRAY_SIZE, sizeof(double));
double sum = 0;
int i;
double sum1 = 0;
for (i = 0; i < N_TIMES; i++) {
int j;
for (j = 0; j < ARRAY_SIZE; j += 20) {
sum += array[j] + array[j+1] + array[j+2] + array[j+3] + array[j+4] + array[j+5] + array[j+6] + array[j+7] + array[j+8] + array[j+9];
sum1 += array[j+10] + array[j+11] + array[j+12] + array[j+13] + array[j+14] + array[j+15] + array[j+16] + array[j+17] + array[j+18] + array[j+19];
}
}
sum += sum1;
return 0;
}
这是我使用指针时的内容(此代码会生成错误):
int *j;
for (j = array; j < &array[ARRAY_SIZE]; j += 20) {
sum += *j + *(j+1) + *(j+2) + *(j+3) + *(j+4) + *(j+5) + *(j+6) + *(j+7) + *(j+8) + *(j+9);
sum1 += *(j+10) + *(j+11) + *(j+12) + *(j+13) + *(j+14) + *(j+15) + *(j+16) + *(j+17) + *(j+18) + *(j+19);
}
如何修复此错误?顺便说一句,我不想要关于尝试优化代码的替代方法的建议。这是一个家庭作业问题,限制了我可以做什么。我想一旦我修复了这个指针问题,它将在 7 秒内运行,我会很高兴的。