数组与指针
数组存同类型的一批数据;指针存变量的内存地址。指针是 C 语言最强大也最危险的部分,是"理解计算机"的关键。
数组
int arr[5] 声明长度 5 的数组,下标从 0 开始。二维数组 int m[2][3]。
指针
int *p = &x 声明指针 p 指向变量 x 的地址;*p 解引用取值;&x 取地址。指针可以指向数组(数组名本身就是首地址)。
指针与数组
arr[i] 等价于 *(arr + i)。指针加减按指向类型大小移动。
注意
指针用前一定要初始化,用完 free 释放(malloc 分配的内存),否则内存泄漏或野指针崩溃。
代码示例
#include <stdio.h>
int main() {
// 数组
int arr[5] = {10, 20, 30, 40, 50};
for (int i = 0; i < 5; i++) {
printf("arr[%d]=%d\n", i, arr[i]);
}
// 指针
int x = 42;
int *p = &x; // p 指向 x 的地址
printf("x 的值: %d\n", x);
printf("p 指向的值: %d\n", *p);
*p = 100; // 通过指针修改 x
printf("修改后 x: %d\n", x);
// 指针遍历数组
int *q = arr;
for (int i = 0; i < 5; i++) {
printf("%d ", *(q + i));
}
printf("\n");
return 0;
}