C 语言指针与数组的深层关系及实战
在 C 语言里,数组和指针的关系非常微妙,很多初学者容易混淆。其实只要理解了数组名的本质和指针算术运算,就能写出更高效的代码。这篇文章会带你从底层逻辑出发,掌握指针操作数组的核心技巧,并解决常见的越界问题。
数组名与指针的关系
数组名在大多数情况下会被编译器隐式转换为指向首元素的常量指针。这意味着 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++ 这种写法是非法的。
另外,下标访问 arr[i] 本质上就是 *(arr + i)。指针算术运算会根据类型自动计算偏移量,比如 int 占 4 字节,arr + 1 就会跳过 4 个字节。
指针操作数组的实战
理解了原理,我们来看看怎么用指针处理实际问题。
遍历求和
用指针遍历数组通常比下标更灵活。
#include <stdio.h>
int main() {
int arr[6] = {1, 2, 3, 4, 5, 6};
int sum = 0;
*p = arr;
len = (arr) / (arr[]);
( i = ; i < len; i++) {
sum += *p;
p++;
}
(, sum);
;
}


