特殊函数

前言:一些很久很简单的基础,回顾一下,以前没有写博客的习惯,资料都有些乱,现在整理一下基础的东西,放在博客,自己也方便

 

递归函数:自己调用自己的函数

正确的递归函数:

①递推阶段:不断调用自己

②递推的终止条件

③回归阶段:返回调用的位置

例:

void fun(int n)
{
    printf("hello world\n");
    if(n> 0)
    fun(n-1); 
}
int main(void)
{
    fun(5);
    return 0;
}

 

变参函数:

格式:返回值类型 函数名(固定参数, ...)

      {

   函数体

}

例:

void myprint(int n,...)
{
    va_list p;  //定义一个提取变参的指针
    int i;
    float a;

    //对指针初始化
    va_start(p,n);

    for(i = 0; i < n; i++){
    a = va_arg(p,double);  //提取变参的值
    printf("%.2f\t",a);
    }
    printf("\n");

    va_end(p);  //提示变参提取结束
}

int main(void)
{
    myprint(3,1.0,2.0,3.0);
    myprint(5,1.2,2.3,3.4,4.5,5.6);
    myprint(7,1.0,2.0,3.0,4.0,5.0,6.9,7.9);
    return 0;
}

 

 

回调函数:不直接调用,通过其他函数来调用的函数

函数调用过程:

① 地址压栈

② 跳转

③ 执行函数体

④ 返回

 

函数运行需要一定的时间,使用类函数宏(带参宏)的一个原因可减少执行时间,但带参宏预处理后将不存在了

 

例:

void fun(int a,void(*p)(int))
{
    p(a);
}

int main(void)
{
    fun(123,recall_fun);  //隐式(间接)调用回调函数:recall_fun
    return 0;
}

 

 

内联函数:将普通函数和带参宏的优点集中在一起的函数

通常函数调用需要一定的时间开销,这意味着执行调用时花费了时间用于调用、传递参数、跳转到函数代码并返回,使用类函数宏的一个原因就是可减少执行时间,一般在头文件中定义

判断一个函数需不需要定义为内联函数的标准:

  1. 函数体执行时间很短
  2. 函数体中没有循环语句
  3. 函数实现的功能对于系统来说比较关键

例:

Inline int max(int i inj)
{
 Return (i>j)? i:j;
}

 

posted @ 2019-04-10 17:54  jemyyy  阅读(224)  评论(0编辑  收藏  举报