MST

星途 面试题库

面试题:C语言中数组下标引用与指针访问的基础应用

假设有一个整型数组 `int arr[5] = {1, 2, 3, 4, 5};`,请分别使用数组下标引用和指针访问的方式,编写代码将数组元素逆序输出。并解释这两种方式在内存访问上的异同点。
17.5万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

使用数组下标引用逆序输出

#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    for (int i = 4; i >= 0; i--) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

使用指针访问逆序输出

#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int *ptr = arr + 4;
    while (ptr >= arr) {
        printf("%d ", *ptr);
        ptr--;
    }
    printf("\n");
    return 0;
}

内存访问异同点

  • 相同点
    • 两种方式最终都是访问数组在内存中的存储位置,数组在内存中是连续存储的,无论是通过数组下标还是指针,都能准确访问到每个元素的内存地址,从而获取或修改其值。
  • 不同点
    • 数组下标引用:编译器在编译时会将数组下标引用 arr[i] 转换为指针偏移的形式 *(arr + i),它通过计算偏移量来定位元素。从代码可读性角度,数组下标引用更直观,易于理解是在访问数组的第 i 个元素。
    • 指针访问:直接操作指针,指针变量存储的是数组元素的内存地址。通过对指针进行加减运算来移动指针,从而访问不同的数组元素。指针访问在一些复杂的内存操作场景(如动态内存分配、链表等)中更加灵活,但同时也更容易出错,对程序员的要求更高,代码可读性相对较差,尤其是在指针运算复杂时。