MST

星途 面试题库

面试题:C语言一维数组指针优化之基础应用

在C语言中,给定一个一维数组int arr[100] = {0}; 请使用数组指针的方式遍历该数组并计算所有元素之和,同时阐述为何这种方式在效率上可能比普通数组下标访问更具优势。
14.9万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#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) 直接在指针基础上进行偏移,相对来说计算更简单,减少了每次访问数组元素时的计算开销。