函数类型有什么用?

本文详细介绍了C/C++中的函数类型,包括如何声明函数类型、使用函数指针以及通过typedef定义函数类型别名等内容,并解释了为什么函数不能直接作为返回值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数类型通常用来声明函数或者用来组成复杂的类型,例如
void foo() {
  int bar1();  // 声明一个函数bar,返回int,参数表为空,其类型便是函数类型
  int (*p1)();  // p1是一个函数指针,*p1的类型便是一个函数类型,同上
  typedef int FUN();  // typedef一个函数类型FUN,该类型返回int,参数表为空
  FUN bar2;  // 等价于int bar2();
  FUN *p2;  // 等价于int (*p2)();
  FUN *foobar(FUN *);  // 声明一个函数foobar,其返回值是FUN *,参数也是FUN *
                       // 等价于int (*foobar(int (*)()))();
}

C/C++规定函数的返回值不能是函数类型或者数组类型,只能用函数指针或者对象指针
来代替

例如,有如下声明

 typedef int F(void);

这种类型的函数不带参数,返回值是int。那么可以这样声明fg

F f, g;

相当于声明:

int f(void);
int g(void);

下面这个函数声明是错误的:

F h(void);//因为函数可以返回void类型、标量类型、结构体、联合体,但不能返回函数类型,也不能返回数组类型。

 

例如:
int foo() {return 0;}
typedef int FUN();
FUN bar1() {  // error!
  return foo;
}
FUN *bar2() {  // OK!
  return foo;  // foo将隐式转换为函数指针
}

基本上,可以理解为在C/C++中函数不具有值语义,每个函数必须在编译时就定义,我
们不能在运行中生成和拷贝一个函数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值