面试题答案
一键面试#include <stdio.h>
int main() {
int arr[100] = {0};
int *ptr = arr;
int sum = 0;
for (int i = 0; i < 100; i++) {
sum += *(ptr + i);
}
printf("数组所有元素之和为: %d\n", sum);
return 0;
}
使用数组指针方式遍历数组在效率上可能比普通数组下标访问更具优势,原因如下:
- 编译器优化:现代编译器对于指针运算的优化更为成熟,在编译阶段能够更好地对指针运算进行优化,产生更高效的机器码。例如,在循环中使用指针时,编译器更容易识别出指针的线性递增模式,从而可以进行更激进的优化,如循环展开等。
- 减少计算开销:数组下标访问在每次访问时需要计算
arr[i]
实际的内存地址,即arr + i * sizeof(int)
,这种乘法和加法运算需要额外的 CPU 周期。而指针运算*(ptr + i)
直接在指针基础上进行偏移,相对来说计算更简单,减少了每次访问数组元素时的计算开销。