C语言指针与数组的深度应用与内存解析
💡 学习目标:掌握指针与数组的等价性原理,熟练运用指针操作数组元素,理解二者在内存中的存储本质,解决实际开发中数组遍历、数据拷贝的高效实现问题。 💡 学习重点:指针与数组名的区别、指针算术运算操作数组、二维数组的指针访问方式、内存视角下的数组与指针关系。
48.1 指针与数组的核心关联:本质与等价性
在C语言中,指针和数组的关系密不可分。很多初学者会混淆数组名和指针的概念,实际上二者既有联系又有本质区别。
48.1.1 数组名的'隐式转换'特性
当数组名出现在表达式中时,它会隐式转换为指向数组首元素的指针。我们可以通过一个简单的例子来验证这个特性:
#include <stdio.h>
int main() {
int arr[5] = {10, 20, 30, 40, 50};
// 输出数组首元素地址
printf("数组名arr的地址:%p\n", arr);
// 输出数组首元素的指针地址
printf("&arr[0]的地址:%p\n", &arr[0]);
// 用数组名访问首元素
printf("arr[0] = %d\n", arr[0]);
// 用指针方式访问首元素
printf("*arr = %d\n", *arr);
return 0;
}
✅ 运行结果:
数组名arr的地址:0x7ffeefbff560
&arr[0]的地址:0x7ffeefbff560
arr[0] = 10
*arr = 10


