关于 typedef的疑惑

xiaole921 2012-09-12 10:39:48
请问 typedef void (*logger)(int level, char func);和typedef void (logger)(int level, char func)这两者有什么区别吗?请教,前者是定义一个函数指针,里面有两个参数 level 和func 返回void 类型,而后者又代表什么意思呢?
...全文
241 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
指针从不野 2012-09-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

总结下6楼和9楼的
C/C++ code

typedef void (*logger)(int level, char func);//logger是函数指针
typedef void (logger)(int level, char func);//logger是函数类型
typedef int* my_int_point;//my_int_point是int指针
typedef int……
[/Quote]
把函数类型和内置类型int对比理解一下也许就更容易理解。
指针从不野 2012-09-23
  • 打赏
  • 举报
回复
总结下6楼和9楼的

typedef void (*logger)(int level, char func);//logger是函数指针
typedef void (logger)(int level, char func);//logger是函数类型
typedef int* my_int_point;//my_int_point是int指针
typedef int my_int;//my_int是int类型
wizard_tiger 2012-09-23
  • 打赏
  • 举报
回复
六楼正解。
li89 2012-09-17
  • 打赏
  • 举报
回复
要多动手滴


[Quote=引用 8 楼 的回复:]
LZ有编译上面的代码么?
[/Quote]
jiandingzhe 2012-09-17
  • 打赏
  • 举报
回复
楼主考虑下面这个就明白了

typedef int* my_type_a;
typedef int my_type_b;
xiaole921 2012-09-15
  • 打赏
  • 举报
回复
肯定是这样的么?
ForestDB 2012-09-15
  • 打赏
  • 举报
回复
LZ有编译上面的代码么?
自信男孩 2012-09-12
  • 打赏
  • 举报
回复
后面的写法不经常出现,第一种用法比较普遍;
第二种的理解和下面的定义类似的:
typedef char * pint8_t;
typedef char int8_t;
dengxianzhi 2012-09-12
  • 打赏
  • 举报
回复
坐等大神
tbg1986tbg 2012-09-12
  • 打赏
  • 举报
回复
如楼上说得、typedef关键字是起别名的意思。
如:
typedef int a;//意思就是给int类型起了另外一个名称叫 a

a data1;//这句话就是定义一个类型的a的变量data1,而a是int类型的别名。所以这句相当于int data1;

所以函数返回值类似。。
ForestDB 2012-09-12
  • 打赏
  • 举报
回复

# include <stdio.h>

typedef int (*foo)(int a, int b); // foo是一个函数指针类型

typedef int (bar)(int a, int b); // bar是一个函数类型

int main()
{
bar add; // 声明add是一个函数,这句相当于写了句
// int add(int a, int b);
foo f = add; // 定义函数指针指向add
printf("%d\n", f(1, 2));

return 0;
}

int add(int a, int b) // add的定义在这里
{
return a + b;
}

赵4老师 2012-09-12
  • 打赏
  • 举报
回复
定义一个函数类型,该函数类型为“里面有两个参数 level 和func 返回void 类型”
ForestDB 2012-09-12
  • 打赏
  • 举报
回复

# include <stdio.h>

typedef int (*foo)(int a, int b); // foo是函数指针类型

typedef int bar(int a, int b); // bar是函数类型,它两边的()不重要

int main()
{
bar add; // 声明add是一个函数,相当于写了
// int add(int a, int b);
foo f = &add; // 定义了一个函数指针,指向add函数
printf("%d\n", f(1, 2));

return 0;
}

int add(int a, int b) // add的定义在这里
{
return a + b;
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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