MST

星途 面试题库

面试题:C语言一维数组指针与下标转换基础应用

假设有一个一维数组 `int arr[5] = {1, 2, 3, 4, 5};`,请使用指针和下标两种方式分别实现对数组元素的遍历并输出,同时解释指针和下标在这种场景下的转换原理。
35.7万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

指针方式遍历并输出

#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int *ptr = arr;
    for (int i = 0; i < 5; i++) {
        printf("%d ", *(ptr + i));
    }
    return 0;
}

下标方式遍历并输出

#include <stdio.h>

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

指针和下标转换原理

在C语言中,数组名在大多数情况下会被隐式转换为指向数组首元素的指针。例如 int arr[5]arr 就代表数组首元素的地址,和 &arr[0] 等价。

当使用指针 int *ptr = arr; 时,*(ptr + i) 表示访问从 ptr 开始偏移 i 个元素位置的内容。因为指针算术运算中,指针加上一个整数 n,其实际偏移量是 n 乘以指针所指向数据类型的大小(这里 int 类型大小通常为4字节)。

而下标方式 arr[i] 本质上和 *(arr + i) 是等价的。编译器在处理 arr[i] 时,会将其转换为指针偏移的形式 *(arr + i) 来访问数组元素。也就是说,下标方式其实是基于指针偏移的一种语法糖,让代码在访问数组元素时更加直观和方便。