调用约定
当函数调用发生时
参数会传递给被调用的函数
而返回值会被返回给函数调用者
调用约定描述参数如何传递到栈中以及栈的维护方式
参数传递顺序
调用栈清理
调用约定是预定义可理解为调用协议
调用约定通常用于库调用和库开发的时候
例子45-1:
#include <stdio.h>
float average(int array1[],int size)
{
int i = 0;
float avr = 0;
for(i = 0;i < size; i ++)
{
avr += array1[i];
}
return avr/size;
}
int main()
{
int array1[] = {1,2,3,4,5};
printf("%f\n",average(array1,5));
}
输出结果:
3.000000
可变参数
C语言中可以定义参数可变的函数
参数可变函数的实现依赖于stdarg.h头文件
va_list-参数集合
va_arg-取具体参数值
va_start-表示参数访问的开始
va-end-标识参数访问的结束
例子45-2:
#include <stdio.h>
#include "stdarg.h"
float average(int n,...)
{
va_list args; //可变参数集合
int i = 0;
float sum = 0;
va_start(args,n); //可变参数访问开始
for(i = 0;i < n; i ++)
{
sum += va_arg(args,int); //从va_arg取具体参数值,取n个
}
va_end(args);//参数已经取完了
return sum/n;
}
int main()
{
printf("%f\n",average(5,1,2,3,4,5));
printf("%f\n",average(4,1,2,3,4));
return 0;
}
输出结果:
3.000000
2.500000
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。