c 语言函数类型简介

c语言函数扩展说明:
1 指针型函数 返回值为内存地址(指针变量)的函数称之为 指针型函数
2 递归函数
3 指向函数的指针

一 指针型函数

指针型函数定义:
<存储类型> <返回数据类型> * 函数名 (函数的形参及说明);
在指针型函数中,函数的存储类型同普通函数一致分extern static
函数的返回值为 返回一个指针变量 并且指针类型要同函数定义时的返回数据类型一致。
指针型函数注意事项:

在函数体内必需有return 语句,return 语句后结果值可以是:变量的地址 数组的首地址,这些变量可以是全局的静态的,但是不能把函数内的自动变量的地址返回(因为当函数执行完毕后,函数所涉及的内存空间会被系统自动释放,返回的地址值随着函数运行完毕变的不存在)。


二、递归函数

递归函数又称之为自调用函数,它的特点是在函数内部直接或间接地自己调用自己。

三、指向函数的指针

在c语言中,函数整体不能作为参数直接传递给另一个函数。在c语言中,虽然函数不是变量,但它却具有内存物理地址。函数的函数名和数组名相似,函数名表示存储该函数的首地址。
例:
int function1();
function1就代表该函数在计算机中的首地址,在程序中调用函数,程序控制转移的位置从函数的首地址开始进入。


每个函数都有一个首地址,如果定义一个指针变量,把函数的首地址放入其中,即用一个指针变量指向该函数,就可以通过指针变量来调用它所指向的函数, 由于这种指针变量是指向函数的所以称之为“函数指针”。
函数指针的定义格式如下:
<存储类型> <返回数据类型> (*函数指针名)(参数表)=函数名;
存储类型:同变量的存储类型有 auto extern static等类型
数据类型:指针所指函数的返回类型(所以函数指针的数据类型必须和它所指向的函数具有相同的数据类型)
*函数指针名:必须用一对圆括号括起,表示函数名先和*进行结合,说明这个变量是一个指针变量,然后再同()结合,表示指针变量指向函数。

函数指针常见的定义方式:
int (* fun1)(int,int)=sum;

int (* fun1)(int,int);
fun1 =sum;


函数指针的优点:可以通过调用函数指针的方式来执行函数。
可以将函数作为参数放入另外一个函数中执行
例:

 #include "stdio.h"
float  sum(float,float);
float  sumExtend(float,float,float (* t)(float,float));       
int main(){
   float a1,a2;
   printf("请输入两个浮点数:\n");
   scanf("%f,%f",&a1,&a2);
   
   printf("%f +%f sumExtend is %f\n",a1,a2,sumExtend(a1,a2,sum));
  
} 

float sum(float _a1,float _a2)
{
    return _a1+_a2;
   
}


float sumExtend(float _a1,float _a2,float (*t)(float b1,float b2))
{
      return (*t)(_a1,_a2)*100;
  
}

[root@localhost ~]#./t
请输入两个浮点数:
4.5,7.8
4.500000 +7.800000 sumExtend is 1230.000000

相关阅读:
main 函数接收参数
c 语言中 变量存储类型简介