函数类型有什么用?

函数类型通常用来声明函数或者用来组成复杂的类型,例如
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++中函数不具有值语义,每个函数必须在编译时就定义,我
们不能在运行中生成和拷贝一个函数

你可能感兴趣的:(C++/C)