纯小白,大佬勿喷
例子:
#include <stdio.h>
int main(){
int a = 16, b = 932, c = 100;
//定义一个指针数组
int *arr[3] = {&a, &b, &c};//也可以不指定长度,直接写作 int *parr[]
//定义一个指向指针数组的指针
int **parr = arr; // parr是指向arr第0个元素的指针
//int*(*parr)
// 括号中的*表示parr是一个指针
// 括号外的 int* 表示parr指向的数据的类型
printf("%d, %d, %d\n", *arr[0], *arr[1], *arr[2]);
//arr[0]是一个指针 要在前面加上* 才能拿个他的值
printf("%d, %d, %d\n", *parr[0], *parr[2], **(parr+2));
// parr+i 表示第 i 个元素的地址,
// *(parr+i) 表示获取第 i 个元素的值(该元素是一个指针),、
// **(parr+i) 表示获取第 i 个元素指向的数据。
return 0;
}
结论:
*arr[0] == **(parr+0)
*arr[0], *arr[1], *arr[2]
16, 932, 100
**(parr+0), **(parr+1), **(parr+2)
16, 932, 100
arr[0] == *parr
arr, arr[0] arr[1], arr[2]
-16774208,-16774228 -16774224, -16774220
*parr, *(parr+0), *(parr+1), *(parr+2)
-16774228, -16774228, -16774224, -16774220
ps: 为什么arr ≠ arr[0]????
&arr[0] == &(*parr) == parr
&arr[0] &arr[1] &arr[2]
-16774208, -16774200, -16774192
&(*parr), &(*(parr+1)), &(*(parr+2))
-16774208, -16774200, -16774192
parr+0 parr+1 parr+2
-16774208,-16774200, -16774192