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