看不懂的typedef

z752964360 2010-04-11 12:06:23
教科书上一般举例
typedef A B;
可以用B代替A

可今天看到:

1. 原声明:int *(*a[5])(int, char*);
变量名为a,直接用一个新别名pFun替换a就可以了:
typedef int *(*pFun)(int, char*);
原声明的最简化版:
pFun a[5];

2. 原声明:void (*b[10]) (void (*)());
变量名为b,先替换右边部分括号里的,pFunParam为别名一:
typedef void (*pFunParam)();
再替换左边的变量b,pFunx为别名二:
typedef void (*pFunx)(pFunParam);
原声明的最简化版:
pFunx b[10];



完全看不懂,int *(*a[5])(int, char*);是什么意思?
...全文
135 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jbz001 2010-04-11
  • 打赏
  • 举报
回复
返回值为int型指针的函数
函数有两个参数,一个是int型的,一个是char *型的。
stardust20 2010-04-11
  • 打赏
  • 举报
回复
int *(*a[5])(int, char*);
a是有5个元素的函数指针数组
typedef int *(*pFun)(int, char*);
pFun是一个函数指针,形参为int, char*,返回值为int *
pFun a[5];
一个函数指针数组
z752964360 2010-04-11
  • 打赏
  • 举报
回复
谢谢大家
cattycat 2010-04-11
  • 打赏
  • 举报
回复
int *(*a[5])(int, char*);

a是函数指针数组,这个数组的元素是函数指针,指向参数int,char*返回值int*的函数。
longx_ok 2010-04-11
  • 打赏
  • 举报
回复
呵呵,这个推荐你看一本书《C专家编程》,里面有个章节讲的很清楚,声明!数组的数组,指针的指针,数组指针,指针数组。当你把这4个弄懂上面的问题就很好理解了。
int *(*a[5])(int, char*);这个只是一个函数的声明而已,它的返回值是一个Int *,参数一个是int,一个是char *,再说下这个函数本身,这是一个指针函数.(*a[5])是一个指针数组,每个元素都是一个指向该函数的指针
z752964360 2010-04-11
  • 打赏
  • 举报
回复
*[]解析出数组中的值
但是a没有定义啊!
cy330206 2010-04-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 z752964360 的回复:]
我在想下
a是什么类型啊
[]的优先级高于* 所以解析出来的是?
[/Quote]

指针是什么类型。。。
恩。。
z752964360 2010-04-11
  • 打赏
  • 举报
回复
我在想下
a是什么类型啊
[]的优先级高于* 所以解析出来的是?
ForestDB 2010-04-11
  • 打赏
  • 举报
回复
不是typedef不懂,而是这种复杂的类型声明不懂。

int *(*a[5])(int, char*);
a是个有5个元素的数组,每个元素都是个函数指针,被指向的函数应该有两个参数,第一个是int,第二个是char*,然后函数应该返回int*。

void (*b[10])(void (*)());
b是个有10个元素的数组,每个元素都是个函数指针,被指向的函数有一个参数,返回void,而这个参数也是个函数指针(指向的函数无参数,返回void)。
JYH1238 2010-04-11
  • 打赏
  • 举报
回复
int *(*a[5])(int, char*)

a: 5个元素为以整形,字符串为参数并返回一个整形指针的函数指针的数组

不知对否?

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧