MST

星途 面试题库

面试题:C语言指针在一维数组中的基础效率问题

在C语言中,给定一个包含100个整数的一维数组,分别使用普通数组下标访问方式和指针访问方式遍历该数组并计算所有元素的和。请编写代码实现,并简要阐述为什么指针访问在某些情况下效率可能更高。
46.4万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>

// 使用普通数组下标访问方式计算数组元素和
int sumWithIndex(int arr[], int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i];
    }
    return sum;
}

// 使用指针访问方式计算数组元素和
int sumWithPointer(int arr[], int size) {
    int sum = 0;
    int *ptr = arr;
    for (int i = 0; i < size; i++) {
        sum += *ptr++;
    }
    return sum;
}

int main() {
    int arr[100];
    for (int i = 0; i < 100; i++) {
        arr[i] = i + 1;
    }

    int sumIndex = sumWithIndex(arr, 100);
    int sumPointer = sumWithPointer(arr, 100);

    printf("使用数组下标访问方式的和: %d\n", sumIndex);
    printf("使用指针访问方式的和: %d\n", sumPointer);

    return 0;
}

指针访问在某些情况下效率更高的原因:

  1. 减少计算开销:使用数组下标访问时,每次访问 arr[i] 实际上要计算 &arr[0] + i * sizeof(int) 的地址,而指针访问如 *ptr++ 只需简单的指针自增操作,减少了乘法和加法的计算开销。
  2. 更好的内存局部性:指针连续访问内存,符合内存局部性原理,在缓存机制下,能提高缓存命中率,减少内存访问次数,从而提高效率。