c 指针阅读技巧-右左法则

右左法则:

1)从最里层圆括号中未定义的标识符看起

2)首先往右看,再往左看

3)遇到圆括号或方括号时可以确定部分类型,并调转方向

4)重复2,3步骤直到阅读结束

下面是一些例子

    int (*p1)(int*, int (*f)(int*));
    
    int (*p2[5])(int*);
    
    int (*(*p3)[5])(int*);

    int*(*(*p4)(int*))(int*);
    
    int (*(*p5)(int*))[5];
int (*p1)(int*, int (*f)(int*));
--> p1为指针,指向函数,函数的参数为int*和一个名字为f,参数为int*的函数指针,返回值为int

int (*p2[5])(int*);
--> p2为数组,有5个元素,数组元素为指针,指针指向函数,函数类型为 int(int*)

int (*(*p3)[5])(int*);
--> p3为指针,指向数组,数组内有5个元素,数组元素为指针,指针指向函数,函数类型为 int(int*)

int*(*(*p4)(int*))(int*);
--> p4为指针,指向函数,函数的参数为int*,返回值为指针,指针指向函数,函数类型为 int*(int*)

int (*(*p5)(int*))[5];
--> p5为指针,指向函数,函数的参数为int*,返回值为指针,指针指向数组,数组类型为int[5]


在实际工程中,我们需要使用typedef关键字,对这些定义进行简化,更容易读懂。使用typedef进行简化的步骤,实际上就是右左法则的倒述。

p1的简化:
typedef int (FuncType1)(int *);
typedef int (FuncType2)(int*,Functype1* f);
FuncType2* p1;

p2的简化:
typedef int(FuncType)(int*);
typedef FuncType* (ArrayType)[5];
ArrayType p2; //指针数组

p3的简化:
typedef int(FuncType)(int*);
typedef FuncType* (ArrayType)[5];
ArrayType *p3; //数组指针

p4的简化:
typedef int* (FuncType1)(int*);
typedef FuncType1* (FuncType2)(int*);
FuncType2* p4;

p5的简化:
typedef int(ArrayType)[5]; 
typedef ArrayType * (FuncType)(int*);
FuncType* p5; 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值