关于c:C函数参数的秘密下

调用约定

当函数调用产生时
参数会传递给被调用的函数
而返回值会被返回给函数调用者
调用约定形容参数如何传递到栈中以及栈的保护形式
参数传递程序
调用栈清理
调用约定是预约义可了解为调用协定
调用约定通常用于库调用和库开发的时候

例子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

可变参数的限度

可变参数必须从头到尾依照程序一一拜访
参数列表中至多要存在一个确定的命名参数
可变参数函数无奈确定理论存在的参数的数量
可变参数函数无奈确定参数的理论类型

小结:

调用约定指定了函数参数的入栈程序以及栈的清理形式
可变参数是C语言提供的一种函数设计技巧
可变参数的函数提供了一种更不便的函数调用形式
可变参数必须程序的拜访,无奈间接拜访两头的参数值

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理