c语言向函数传递函数作为参数

Python018

c语言向函数传递函数作为参数,第1张

#include <stdio.h>

//---子函数声明---// 

int func1()

int func2(int (*func1)())        //形参为函数指针(即指向函数的指针) 

//---主函数---// 

int main(){

    printf("向函数二传递函数一,\n即函数一作为函数二的参数。\n")

    printf("%d ",func1())

    printf("%d\n",func2(func1))//注意函数名即为函数地址!!!!!! 

}                                //实参为函数名func1或者&func1,两者等价,而非func1() 

//---子函数定义---// 

int func1(){

    return 1

}

int func2(int (*func1)()){        //形参为函数指针(即指向函数的指针)

    return func1()+1

}

建立中间变量(形参),把实参值赋值给中间变量,当被调函数返回值时,系统释放掉中间变量。

在程序中通过对函数的调用来执行函数体,其过程与其它语言的子程序调用相似。对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。

函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。例如:z=max(x,y)是一个赋值表达式,把max的返回值赋予变量z。

扩展资料:

C语言中又规定在以下几种情况时可以省去主调函数中对被调函数的函数说明。

1、如果被调函数的返回值是整型或字符型时,可以不对被调函数作说明,而直接调用。这时系统将自动对被调函数返回值按整型处理。例8.2的主函数中未对函数s作说明而直接调用即属此种情形。

2、当被调函数的函数定义出现在主调函数之前时,在主调函数中也可以不对被调函数再作说明而直接调用。例如例8.1中,函数max的定义放在main 函数之前,因此可在main函数中省去对max函数的函数说明int max(int a,int b)。

3、如在所有函数定义之前,在函数外预先说明了各个函数的类型,则在以后的各主调函数中,可不再对被调函数作说明。

参考资料来源:百度百科-函数调用

分两种,一种是按值传递,一种是按地址传递,

按值传递就是在子函数中开辟出一个临时内存空间,将传递的数值保存在这个空间中,当子函数结束后,这个内存空间就会释放了!

按地址传递则是把主函数开辟的某个内存空间首地址传递给子函数,子函数可以直接读写主函数上这段内存空间,当子函数结束后,这部分空间不会被释放,主函数将继续使用这段空间!