C中一种函数声明方式及可变参数函数讨论

本文部分原创,部分改编

可变参数函数改编自:网友kevintz的“C语言中可变参数的用法”一文

#include<stdio.h>
//引入可变参数函数头文件
#include<stdarg.h>
//C语言中另一种函数声明方式
print(uint,buf,len)
int uint;
int buf;
int len;
{
    printf("Function Declaration another Way Result1 of Running: %d  %d  %d\r\n",uint,buf,len);
    return 0;
}

/******可变参数函数*******/
void simple_va_fun(int start,...){
    va_list arg_ptr;
    int nArgValue=start;
    int nArgCount;          //可变数目
    va_start(arg_ptr,start);//以固定参数的地址为起点确定变参的内存起始地址
    do{
        ++nArgCount;
        printf("the %d th arg:%d\r\n",nArgCount,nArgValue);//输出各参数的值
        nArgValue = va_arg(arg_ptr,int);                   //va_arg返回可变参数的具体取值
    }while(nArgValue!=-1);                                 //-1为结束判定标志

}
/**    宏定义包含在stdarg.h中
  *    type va_arg(va_list art_ptr, type);
  *    void va_end(va_list arg_ptr);
  *    void va_start(va_list arg_ptr, pre_param);
  *    va_list;
  *
  *    1.首先定义一个va_list类型的变量,该变量是指向参数地址的指针
  *    得到参数地址后结合参数类型,才能得到参数的值,此处为arg_ptr
  *    2.然后用va_start宏初始化定义va_list的变量,第二个参数是可变
  *    参数列表的前一个参数,也就是最后一个固定参数
  *    3.然后依次用va_arg宏使arg_ptr返回可变参数的地址,结合参数类型
  *    可以得到参数的值
  *    4.设定技术条件,此处条件为判断参数值是否为-1
  *
  *    在va_start宏中,参数不能声明为寄存器变量或者函数或者数组类型
  *
  */
int main(){
    //调用函数
    print(1,2,3);
    //调用函数并使用其返回值
    printf("Function Declaration another Way Result2 of Running :  %d\r\n",print(1,2,3));


    /******可变参数函数*******/

    simple_va_fun(100,200,300,-1);
    simple_va_fun(20,-1);




    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值