MST

星途 面试题库

面试题:C语言数组与指针性能优化之基础应用

在C语言中,已知一个整型数组`int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};`,请使用指针的方式,实现对数组元素的累加,并说明为什么这种指针操作可能在某些场景下比数组下标操作更具性能优势。
27.1万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 使用指针实现数组元素累加的代码如下
#include <stdio.h>

int main() {
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int *ptr = arr;
    int sum = 0;
    for (int i = 0; i < 10; i++) {
        sum += *ptr;
        ptr++;
    }
    printf("数组元素的累加和为: %d\n", sum);
    return 0;
}
  1. 指针操作在某些场景下比数组下标操作更具性能优势的原因
    • 直接内存访问:指针直接指向内存地址,在对数组元素进行连续访问时,指针操作可以直接在内存层面进行,而数组下标操作在编译时会被转换为指针偏移的形式。例如arr[i]实际会被编译器处理成*(arr + i),相比之下,直接使用指针*ptr的操作更为直接,减少了一次计算偏移量的过程,在一些对性能要求极高的场景(如实时系统、嵌入式系统等),这种微小的优化可能会带来显著的性能提升。
    • 缓存友好性:现代计算机的缓存机制对于顺序访问内存的操作更为友好。指针操作通常更容易实现顺序访问,因为指针可以直接移动到下一个内存地址,使得数据更有可能被缓存命中。而数组下标操作可能因为计算偏移量等操作,导致内存访问的局部性不如指针操作,从而降低缓存命中率,影响性能。