使用数组下标引用逆序输出
#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
个元素。
- 指针访问:直接操作指针,指针变量存储的是数组元素的内存地址。通过对指针进行加减运算来移动指针,从而访问不同的数组元素。指针访问在一些复杂的内存操作场景(如动态内存分配、链表等)中更加灵活,但同时也更容易出错,对程序员的要求更高,代码可读性相对较差,尤其是在指针运算复杂时。