我以前答过的一个题的例子拿给你看看.
函数名:errorSetHandler
参数:function是个函数类型的变量,void (*)(int, char_t *),这个函数类型有两个参数,一个整型,一个char_t *的指针型,返回是个void *指针.
返回:是个函数类型,void (*)(int , char_t *),类型说明跟上面一样.
void (*errorSetHandler(void (*function)(int etype, char_t *msg)))(int etype, char_t *msg)
{
void (*oldHandler)(int etype, char_t *buf); //定义一个函数void (*)(int , char_t *)类型的函数变量oldHandler
oldHandler = errorHandler; //把errorHandler赋给oldHandler,errorHandler应该也是个函数变量
errorHandler = function; //把参数function赋给errorHandler
return oldHandler; //返回函数变量oldHandler的值
}
补充一下:
通过typedef可以简化这个函数的形式:
typedef void (*ErrHdlr)(int, char_t *);
然后这个函数可以简化成:
ErrHdlr errorSetHandler(ErrHdlr function)
ErrHdlr oldHandler;
oldHandler = errorHandler;
errorHandler = function;
return oldHandler;
这样是不是就很直观了
形式参数和实际参数
函数的参数分为形参和实参两种.在本小节中,进一步介绍形参、实参的特点和两者的关系.形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用.实参出现在主调函数中,进入被调函数后,实参变量也不能使用.形参和实参的功能是作数据传送.发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送.
函数的形参和实参具有以下特点:
形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元.所以呢,形参只有在函数内部有效.函数调用结束返回主调函数后则不能再使用该形参变量.
实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参.所以呢应预先用赋值,输入等办法使实参获得确定值.
实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配"的错误.
函数调用中发生的数据传送是单向的.即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参.
所以呢在函数调用过程中,形参的值发生改变,而实参中的值不会变化.
【例】可以说明这个问题.
main()
int
n;
printf("input
number\n");
scanf("%d",n);
s(n);
printf("n=%d\n",n);
s(int
n)
i;
for(i=n-1;i=1;i--)
n=n+i;
本程序中定义了一个函数s,该函数的功能是求∑ni的值.在主函数中输入n值,并作为实参,在调用时传送给s
函数的形参量n(
注意,本例的形参变量和实参变量的标识符都为n,但这是两个不同的量,各自的作用域不同).在主函数中用printf
语句输出一次n值,这个n值是实参n的值.在函数s中也用printf
在C语言中,形参即为形式参数.它在整个函数编译的时候,没有实际的数据赋于它,仅仅作于定义某个函数或者函数名.
而实参既为实际参数.顾名思义,在函数中,有一个特定的数据赋值给它,可以作于在函数中进行运算.
比如:
void
a=1,b;
b=function(a);
//a作于在函数中进行运算,是实参
function(int
c)
//c作于定义function函数,是形参
{}
形参:全称为"形式参数"是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传递的参数.
形参的作用是实现主调函数与被调函数之间的联系,通常将函数所处理的数据,影响函数功能的因素或者函数处理的结果作为形参.
实参:全称为"实际参数"是在调用时传递给函数的参数,即传递给被调用函数的值.
实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参. 所以呢应预先用赋值,输入等办法使实参获得确定值.
扩展资料:
形参和实参的特点:
①.、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元.所以呢,形参只在函数内部有效.函数调用结束返回主调用函数后则不能再使用该形参变量.
主函数的实参是由操作系统传递的.
c++规定的主函数标准格式(c语言未具体规定):int
main(int
argc,
char
*argv[])
其中int
argc
表示操作系统传递给程序的参数个数,char
*argv[]
存储各个参数.
例如:
若有程序如下:
printf("您输入了
%d
个参数\n分别是:",argc);
for(i=0;i
运行-
cmd
-
输入
c:\app.exe
hello
world!
回车
执行结果将是:
您输入了
个参数
分别是:c:\app.exe
"
注意,第一个参数值将是你程序的文件名.
囧...
你的数组定义的size是N+1,参数传进去的size是N.
参数调用方法没错,细心,细心啊,老兄...
以上就是土嘎嘎小编为大家整理的c语言函数形参的书写相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!