以下三种声明的含义是什么?
1. typedef void *(foo)(int); 2. typedef void (*foo)(int); 3. typedef void *(*foo)(int);
P.S. 最近在学 C 语言。
第 2 种个是用来定义一类形如void foo(int)的函数的,比如
void foo(int)
typedef void (*foo)(int); void demo(int i) { } int main(void) { foo func = demo; return 0; }
第 3 类和第 2 类类似,不过返回值变成了指针类型(在上面就是void *类型)。 第 1 类我也不清楚。。。。
void *
1 的 foo 用于函数指针时还要加个 *, 可以说是函数 指针 类型...
*
typedef void *(foo)(int); void* f(int i) { return NULL; } foo* x = f;
不过一般不这么用
2, 3 的 foo 是函数指针类型,对应的函数的返回类型分别是 void, void*
void
void*
#2 楼 @luikore 好奇第一类声明是否有妙用,呵呵。
#3 楼 @daqing 不知道... 不过对于理解 * 在类型声明的作用是有点帮助的...
typedef void (foo)(int); typedef void (*foo_p)(int); // 函数指针 typedef void (**foo_p_p)(int); // 函数指针的指针
另外还有一种 比较绕脑子的嵌套声明法,就是返回类型是函数指针的函数类型...
typedef void* (*(*bar)(int))(); // 相当于 typedef void* (*foo)(int); typedef foo (*bar)();
为什么要这么写呢... 因为下面两种写法语法都不好解析...
typedef void*(*)(int) (*bar)(); typedef (void*(*)(int)) (*bar)();
cdecl to rescue
http://cdecl.org/
#5 楼 @bhuztez 这个酷,多谢