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