1 #include<stdio.h>
2 /* “右左法则”: */
3 //*p3 指针
4 //(*p3)() 函数指针 函数参数列表为()
5 //*(*p3)() 函数指针 函数参数列表为()、返回值类型为指针
6 //(*(*p3)())[10] 数组指针 指针为函数指针 函数参数列表为()、返回值类型为指针
7 //double(*(*p3)())[10]() 数组指针 指针为函数指针 函数参数列表为()、返回值类型为指针 指针为函数指针函数 函数参数列表为()、返回类型为double
8
9 /* 函数返回值类型 (* 指针变量名) (函数参数列表);格式拆分 */
10 //(*p3)()是(* 指针变量名) (函数参数列表) 相邻的()是隔开返回类型用的,不是优先级的()
11 //double(* (*)[10] )()是返回值类型 类型是一个数组指针 数组元素有10个、元素类型是指针 指针为函数指针 函数参数列表为()、返回类型为double
12 typedef double(* (* (*p3)() )[10] )();
13 int main(){
14 /* “右左法则”: */
15 //(*p1(int)) 函数指针
16 //*(*p1(int)) 函数指针 函数返回类型为指针、参数列表为(int)
17 //void*(*p1(int)) 函数指针 函数返回类型为指针、参数列表为(int) 指针类型为void
18 //void*(*p1(int))[10] 函数指针数组 函数返回类型为指针、参数列表为(int) 指针类型为void
19
20 /* 函数返回值类型 (* 指针变量名) (函数参数列表);格式拆分 */
21 //(*p1(int))中*p1(int)是(* 指针变量名) (函数参数列表),最外面的()是隔开返回类型的标志
22 //void*是函数指针返回类型
23 void* ( *p1(int) ) [10];//函数指针为void* (*(p1) (int))
24
25
26
27 /* “右左法则”: */
28 //*p2 指针
29 //(*p2)(int,int,float) 指针 指针类型为函数 函数参数列表为(int,int,float)
30 //*(*p2)(int,int,float) 指针 指针类型为函数 函数参数列表为(int,int,float)、返回类型为指针
31 //float(*(*p2)(int,int,float))(int) 指针 指针类型为函数 函数参数列表为(int,int,float)、返回类型为指针 指针为函数指针 参数列表为(int)返回类型为float
32
33 /* 函数返回值类型 (* 指针变量名) (函数参数列表);格式拆分 */
34 //float(*)(int):这是函数的返回类型,类型是返回类型为float、参数列表为int的函数指针
35 //(*p2)中的*是函数指针变量名前的标志,p2是函数指针的变量名,参数列表是(int)
36 float(* (*p2)(int,int,float) )(int);
37
38
39
40 //p4() 函数
41 //*p4() 函数指针
42 //*(*p4()) 函数指针 返回类型为指针
43 //*(*p4())[10] 指针数组 数组的元素为函数指针 函数指针的返回类型为指针
44 //int(*(*p4())[10])() 指针数组 数组的元素为函数指针 函数指针的返回类型为指针 指针的类型为函数指针 函数指针返回值类型为int 参数列表为()
45
46 /* 函数返回值类型 (* 指针变量名) (函数参数列表);格式拆分 */
47 //int(*)()返回值类型
48 //(*p4())是函数指针,注意:这里的()是函数指针隔开返回类型的格式()不是运算优先级的括号
49 //[10]是数组元素个数
50 int(* (*p4()) [10] )();
51 return 0;
52 }