C 语言指针与数组的关联机制及实战应用
数组名与指针的关系
在 C 语言中,数组和指针有着密不可分的联系。很多开发者容易混淆这两个概念,其实二者既有关联,又有本质区别。
数组名的本质
理解这一点很关键:数组名在大多数情况下会被编译器隐式转换为指向数组首元素的常量指针。我们来看一段简单的代码:
#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;
}
运行结果如下:
数组首元素地址:0x7ffeefbff560
数组首元素地址:0x7ffeefbff560
数组首元素值:10
从结果可以看出,arr 和 &arr[0] 表示的是同一个地址,都是数组首元素的地址。使用 *arr 可以直接访问数组的首元素,这就验证了数组名可以被当作指针使用。
需要注意的是,数组名是常量指针,不能被修改。以下代码是错误的:
int arr[5];
arr++; // 错误,数组名是常量,不能进行自增操作
数组下标与指针的等价关系
C 语言规定,数组下标访问 arr[i] 等价于指针访问 *(arr + i)。这个等价关系是指针操作数组的核心,我们可以通过指针算术运算来访问数组的任意元素。
示例代码:
#include <stdio.h>
int main() {
int arr[5] = {10, 20, , , };
i;
(i = ; i < ; i++){
(, i, arr[i], i, *(arr + i));
}
;
}


