C 语言指针与数组的核心关系及实战应用
在 C 语言开发中,指针与数组的关系是理解内存模型的关键。很多初学者容易混淆这两个概念,实际上它们既紧密关联又有本质区别。掌握这一点,能帮助你更灵活地操作内存,写出高效的代码。
1. 数组名与指针的关系
1.1 数组名的本质
在大多数表达式中,数组名会被编译器隐式转换为指向首元素的常量指针。这意味着你可以像使用指针一样使用数组名来访问数据。
#include <stdio.h>
int main() {
int arr[5] = {10, 20, 30, 40, 50};
printf("数组首元素地址:%p\n", arr);
printf("数组首元素地址:%p\n", &arr[0]);
printf("数组首元素值:%d\n", *arr);
return 0;
}
运行结果会显示 arr 和 &arr[0] 的地址完全一致,且通过 *arr 可以获取首元素值。这验证了数组名作为指针的可用性。
注意:数组名本质上是常量指针,不能进行自增或赋值操作。
int arr[5];
arr++; // 错误:数组名是常量,不可修改
1.2 下标与指针的等价性
C 语言标准规定,数组下标访问 arr[i] 完全等价于指针运算 *(arr + i)。这是指针操作数组的核心逻辑。
#include <stdio.h>
int main() {
int arr[5] = {10, 20, 30, 40, 50};
( i = ; i < ; i++) {
(, i, arr[i], i, *(arr + i));
}
;
}


