写我的读书笔记关于可变参数

一、简单介绍变参的访问
变参函数,有一个以上的参数,参数个数不定。声明形式如下:
  type Function(type arg1,...);
        type Function(type arg1, type arg2,...);
在C语言中经常出现如下声明:
    printf(const char * _Format, ...); 
    scanf(const char * _Format, ...);
这样的函数,其中它们的参数的个数是不确定的。
对于它们参数的访问可以通过以下宏进行处理:
首先、使用这些宏须引用#include <stdarg.h>
1)定义一个参数列表指针,(通过该指针遍历整个参数列表。)
    va_list arg_ptr;           
2)确定访问参数列表的起始位置,(也就是说从第几个参数开始取值。)
    va_start(arg_ptr, argN);                   //第一个参数为1)所定义的列表指针,第二个参数是变参函数的参数名。
3)取得参数的值
    int n = va_arg(arg_ptr, int);            ///第一个参数为1)所定义的列表指针,第二个参数是变参函数的参数类型。
4)消空参数列表指针,(就是释放指针了)
   va_end(arg_ptr);
二、举例说明

#include  " stdlib.h "
#include 
" stdio.h "
#include 
< stdarg.h >
int  Sum( int  i,  int  j,  int  k, ...);
void  main()
... {
    printf(
"Sum = %d",Sum(100,20,50,32,0));
}


int  Sum( int  i,  int  j,  int  k, ...)
... {
    va_list arg_ptr;
//1)
    int sum=0,n=i;

    va_start(arg_ptr,i);
//2)    

    
while(n != 0)
    
...{        
        sum 
+= n;
        n 
= va_arg(arg_ptr,int); //3)    
    }

    va_end(arg_ptr);
//4
    return sum;
}


三、其他说明
 1)说明:va_start(arg_ptr,argN); argN是位于第一个可选参数之前的固定参数,(或者说,最后一个固定参数;…之前的一个参数)。
 2)如何确定参数的类型。va_arg(arg_ptr,type); type的类型只有自己定义规则,进行分析,像在printf(_format,...),通过对fromat的分析,可以确定以后的参数列表的数据类型。
   3)如何判定参数结束。实际上printf(),就是以后默认的'\0'作为结束的。

转载于:https://www.cnblogs.com/freebird92/archive/2006/12/27/605067.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值