MST

星途 面试题库

面试题:优化C语言代码指针解引用的方法

现有一段C语言代码,频繁使用指针解引用进行数组元素访问,代码如下: ```c #include <stdio.h> int main() { int arr[1000]; for (int i = 0; i < 1000; i++) { arr[i] = i; } int sum = 0; int *ptr = arr; for (int i = 0; i < 1000; i++) { sum += *(ptr + i); } printf("Sum: %d\n", sum); return 0; } ``` 请你对这段代码进行优化,减少指针解引用次数以提升性能,并说明优化思路。
23.5万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

优化后代码

#include <stdio.h>
int main() {
    int arr[1000];
    for (int i = 0; i < 1000; i++) {
        arr[i] = i;
    }
    int sum = 0;
    int *end = arr + 1000;
    int *ptr = arr;
    while (ptr < end) {
        sum += *ptr++;
    }
    printf("Sum: %d\n", sum);
    return 0;
}

优化思路

  1. 减少每次循环的计算量:在原代码中,*(ptr + i)每次循环都要计算ptr + i的地址,然后解引用。优化后代码使用*ptr++ptr在每次循环中自增,减少了每次循环的计算量。同时通过设置end指针,避免在每次循环中进行i < 1000这种索引比较,改为直接进行指针比较,现代编译器对于指针比较的优化通常更好。这样就减少了指针解引用的复杂计算以及循环条件中的计算,从而提升性能。