36、指针阅读技巧分析

1、笔试中的问题
下面的标识符代表什么含义?

1、 int (*p1)(int*, int (*f)(int*));
2、 int (*p2[5])(int*);
3、 int (*(*p3)[5])(int*);
4、 int*(*(*p4)(int*))(int*);
5、 int (*(*p5)(int*))[5];
  • 右左法则:
    — 从最里层的圆括号中未定义的标识符看起
    — 首先往右看,再往左看
    — 遇到圆括号或方括号时可以确定部分类型,并调转方向
    — 重复2,3步骤,直到阅读结束

第一句:p1为函数指针,指向的函数有两个参数,一个参数的类型为指针类型int*,另一个参数的类型为指针类型,函数指针,指向的函数参数为(int*)类型,返回值为int。返回值为int。
第二句:p2为数组,有5个元素,每个元素都是指针,为函数指针。指向的函数类型为int(int*)
第三句:p3为指针,数组指针,指向的数组有5个元素,这5个元素为指针,是函数指针,指向的函数类型为int(int*)
第四句:p4为指针,函数指针,指向一个函数,参数为(int*),返回值为指针,是函数指针,指向的函数类型int*(int*)
第五句:p5为指针,函数指针,指向一个函数,参数为(int*),返回值为指针,指向的数组类型为int[5]

2、在C语言中,有如下代码

typedef char* (*p_f1)(const char*);
p_f1 p1;
p_f1 pa[5];
p_f1 (*pp)[10];

请说明p1,pa,pp分别是什么类型。
答:
p1 是函数指针
pa 是数组 每个元素是也给函数指针 一共5个
pp是数组指针 指向一个有10个元素的数组 数组每个元素是一个函数指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值