typedef int (*funcptr)(); // funcptr is synonym for "pointer
// to function returning int"
funcptr table[10]; // Equivalent to "int (*table[10])();"
为什么右边加个括号
typedef int (*funcptr)(); 什么意思
答案:3 悬赏:10 手机版
解决时间 2021-02-07 20:11
- 提问者网友:世勋超人
- 2021-02-06 21:46
最佳答案
- 五星知识达人网友:骨子里都是戏
- 2021-02-06 22:12
定义一个函数指针类型。
比如你有三个函数:
void hello(void) { printf("你好!"); }
void bye(void) { printf("再见!"); }
void ok(void) { printf("好的!"); }
typdef void (*funcptr)(void);
这样就构造了一个通用的函数
你用的时候可以这样:
void speak(int id)
{
funcptr words[3] = {&hello, &bye, &ok};
funcptr fun = words[id];
(*fun)();
}
这样的话,如果speak(0)就会显示“你好!”
speak(1)就会显示“再见!”
speak(2)就会显示“好的!”
用于处理参数和返回值的形式都一样,但是功能不确定的一组函数,可以使用函数指针。
比如算术运算符,加、减、乘、除,都可以用typedef int (*calc)(int,int)代表,等等
比如你有三个函数:
void hello(void) { printf("你好!"); }
void bye(void) { printf("再见!"); }
void ok(void) { printf("好的!"); }
typdef void (*funcptr)(void);
这样就构造了一个通用的函数
你用的时候可以这样:
void speak(int id)
{
funcptr words[3] = {&hello, &bye, &ok};
funcptr fun = words[id];
(*fun)();
}
这样的话,如果speak(0)就会显示“你好!”
speak(1)就会显示“再见!”
speak(2)就会显示“好的!”
用于处理参数和返回值的形式都一样,但是功能不确定的一组函数,可以使用函数指针。
比如算术运算符,加、减、乘、除,都可以用typedef int (*calc)(int,int)代表,等等
全部回答
- 1楼网友:不甚了了
- 2021-02-07 00:13
typedef int (*funcptr)(); 这个的意思是:定义一个返回值为int,不带参数的函数指针,
就是说funcptr 是 int (*)()型的指针
funcptr table[10];
定义一个数组,这个数组是funcptr类型的。就是说这个数组内的内容是一个指针,这个指针指向一个返回值为int,不带参数的函数
- 2楼网友:舊物识亽
- 2021-02-06 23:35
提问者的意思是很有意义的。按常规,typedef是为后面跟着的标识符起一个别名跟在右边,而现在写法不同,有疑问很有道理。但我想,计算机语言的语法就是些规定,只好记住了。而且就这个具体问题而言,写成typedef int(*)() funcptr可以解释成typedef int (*funcptr)(),但也可以解释成typedef int (*)(funcptr)啊;当然可以规定这种写法只能作typedef int (*funcptr)()解释,那还不如就规定写成typedef int (*funcptr)()方便。这都是当初的开发者的意图,后人只好顺承了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯