瞎扯淡 关于 C 语言中的三类 typedef 的问题,请大牛赐教。

daqing · 2013年07月27日 · 最后由 daqing 回复于 2013年07月28日 · 2876 次阅读

以下三种声明的含义是什么?

1. typedef void *(foo)(int);

2. typedef void (*foo)(int);

3. typedef void *(*foo)(int);

P.S. 最近在学 C 语言。

第 2 种个是用来定义一类形如void foo(int)的函数的,比如

typedef void (*foo)(int);

void demo(int i)
{
}

int main(void)
{
  foo func = demo;

  return 0;
}

第 3 类和第 2 类类似,不过返回值变成了指针类型(在上面就是void *类型)。 第 1 类我也不清楚。。。。

1 的 foo 用于函数指针时还要加个 *, 可以说是函数 指针 类型...

typedef void *(foo)(int);
void* f(int i) { return NULL; }
foo* x = f;

不过一般不这么用


2, 3 的 foo 是函数指针类型,对应的函数的返回类型分别是 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)();

#5 楼 @bhuztez 这个酷,多谢

需要 登录 后方可回复, 如果你还没有账号请 注册新账号