二级指针与指针数组
00:00
C语言二级指针与指针数组详解及应用场景。
1. 二级指针
int x = 42;
int *p = &x; // 一级指针:指向 int
int **pp = &p; // 二级指针:指向 int*
**pp; // 42
*pp; // &x (p 的值)
pp; // &p
2. 指针数组 vs 数组指针
// 指针数组:数组的每个元素是指针
int *arr[5]; // 5 个 int* 元素
// 数组指针:指向数组的指针
int (*ptr)[5]; // 指向 int[5] 的指针
3. 应用场景
3.1 修改调用者的指针
void allocate(int **pp) {
*pp = malloc(sizeof(int));
**pp = 42;
}
int *p = NULL;
allocate(&p); // p 现在指向分配的内存
3.2 字符串数组
const char *names[] = {"Alice", "Bob", "Charlie"};
// names 是指针数组,每个元素指向一个字符串字面量
3.3 命令行参数
int main(int argc, char **argv) {
// argv 是指针数组,每个元素指向一个参数字符串
for (int i = 0; i < argc; i++) {
printf("%s\n", argv[i]);
}
}