C 语言指针与数组的深度关联及实战应用
💡 学习目标:掌握指针与数组的内在联系,熟练运用指针操作数组元素,解决实际开发中的数组遍历、数据交换等问题;学习重点:数组名的本质、指针算术运算操作数组、指针数组与数组指针的区别及应用。
38.1 数组名与指针的关系
在 C 语言中,数组和指针有着密不可分的联系。很多初学者会混淆数组名和指针变量的概念,其实二者既有关联,又有本质区别。
38.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;
}
运行结果:
数组首元素地址:0x7ffeefbff560 数组首元素地址:0x7ffeefbff560 数组首元素值:10
从结果可以看出,arr 和 &arr[0] 表示的是同一个地址,都是数组首元素的地址。
使用 *arr 可以直接访问数组的首元素,这就验证了数组名可以被当作指针使用。
⚠️ 注意:数组名是常量指针,不能被修改。
以下代码是错误的:
int arr[5];
arr++;// 错误,数组名是常量,不能进行自增操作
38.1.2 数组下标与指针的等价关系
💡 C 语言规定,数组下标访问 arr[i] 等价于指针访问 *(arr + i)。
这个等价关系是指针操作数组的核心,我们可以通过指针算术运算来访问数组的任意元素。
示例代码:


