C 语言指针
#include<stdio.h>
int a;
int b[10];
int* p3[10];//指针数组
void func();
int main()
{
//简单的
int* p = &a;//第一种写法
int** p1 = &p;//二级指针
int(*p2)[10] = &b;//int(*p2)[10] = b;数组指针
void(*p3)() = func;//函数指针
//复杂的
int (*(*(*p4)[10])(void))[10];
return 0;
}
void func()
{
printf("lalalalala");
}
详细分析一下这个复杂指针
右手定则 : 从 P4 开始, 大拇指指向自己, 拳心四指头形成一个环, 洞洞对着 P4, 四指逆时针旋转
从 P4 开始, 遇到了一个 *, 它是个指针, * 然后出去指向一个数组, 所以 P4 指针指向一个长度为 10 的数组, 然后数组里面装的是指针, 这样逆时针转过来
然后数组里面的这个指针指向 void 这个函数, 函数的返回值是啥, 我们再逆时针转, 函数返回值是一个指针
然后这个指针又指向一个长度为 10 的数组, 然后数组类型是 int
P4 首先是一个指针
P4* 脱掉 () 之后, 左侧有 *
右侧有 [], 而 [] 的优先级高于 *
的, 那么先与 [] 结合
然后继续逆时针转, 数组里装的是指针
这个数组里装的指针又指向一个函数, 函数返回值是指针, 函数参数是 void
函数返回值是指针, 这个指针又指向一个长度为 10 的数组 [10], 且数组数据类型是 int