C 语言指针与数组的深度关联及实战应用

在 C 语言开发中,指针和数组是最基础也最容易让人困惑的两个概念。很多初学者容易把它们混为一谈,但实际上它们既有紧密的联系,又有本质的区别。理解这一点,对于掌握内存管理、优化代码性能至关重要。
一、数组名与指针的关系
1. 数组名的本质
在大多数表达式中,数组名会被编译器隐式转换为指向数组首元素的常量指针。这意味着 arr 和 &arr[0] 在数值上是相等的,都代表数组第一个元素的地址。
#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++)是非法的,会导致编译错误。
2. 下标访问与指针算术的等价性
C 语言标准规定,数组下标访问 arr[i] 完全等价于指针解引用 *(arr + i)。这是指针操作数组的核心逻辑。
#include <stdio.h>
int main() {
int arr[5] = {, , , , };
( i = ; i < ; i++) {
(,
i, arr[i], i, *(arr + i));
}
;
}


