复杂指针解读typedef double(* (* (*p3)() )[10] )()

发布时间 2023-09-13 20:07:14作者: 败人两字非傲即惰
 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 }