c - 使用指针的 for 循环优化

标签 c pointers optimization for-loop

我正在尝试优化代码以在 7 秒内运行。我把它降到了 8,现在我正在尝试使用指针来加速代码。但是当我尝试编译时 gcc 给出了一个错误:

.c:29: warning: assignment from incompatible pointer type .c:29: warning: comparison of distinct pointer types lacks a cast

这是我在尝试使用指针之前所拥有的:

#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 秒内运行,我就可以开始了。

最佳答案

comparison of distinct pointer types lacks a cast

这意味着您尝试将一种类型的指针与另一种类型的指针进行比较,并且没有强制转换。

double  *array = calloc(ARRAY_SIZE, sizeof(double));
int     *j;

指向double 的指针和指向int 的指针不能直接比较。由于这个原因,您不能将 jarray 进行比较。也许您打算将 j 声明为指向 double 的指针?

关于c - 使用指针的 for 循环优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18326955/

相关文章:

python - 在这段代码中是否有任何 numpy 技巧可以避免 for 循环?

c - 无法在 C 中使用 qsort 对 dirent 进行排序

c - c中的字符串指针交换

c# - 为什么我的类数组元素表现得像一个指针? (C#)

c - 在C中如何将字符串的每一行保存到一个新字符串中?

postgresql - 提高 PostgreSQL 中 GROUP BY ... HAVING COUNT(...) > 1 的性能

python - 使用 Hyperopt-TypeError : 'generator' object has no attribute '__getitem__' 进行 XGboost 调整时出现问题

c - 从数据包负载中提取文件

c - 文件无法识别 : File format not recognized

c - 使用指针访问 long long 变量中的字节