定义可变参数的函数,需要在stdarg.h头文件中定义的va_list类型和va_startva_argva_end三个宏。

定义可变参数函数

va_list ap;  //实际是定义一个指针va_start(ap,num); // 用va_start宏,让ap指向num参数后面的那个参数。

int i = va_arg(ap,int);  // va_arg(ap,int) 读取ap指向的变量,ap指向下一个参数。读书的数据类型有va_arg的第二个参数控制

int * p_arg = va_arg(p_va,int*);  // 说明读取的参数是整型指针

char * p_arg = va_arg(p_va,char*);  // 说明读取的参数是char指针

va_end(ap);//在函数返回前调用

看写的例子: 可变参数求和的两种实现

#include <stdio.h>
#include <stdarg.h> int add(int num, ...);
int add2(int * arg , ...); int main(){
int temp = add(5,1,2,3,4,5);
printf("-->> start result = %d \n", temp);
printf("\n"); int a=1, b=2, c=3, d=4, e=5;
temp = add2(&a,&b,&c,&d,&e,NULL);
printf("-->> start result = %d \n", temp);
return 0;
} int add(int num, ...){
va_list ap;
int result = 0;
va_start(ap,num);
while(num!=0){
int i = va_arg(ap,int);
result += i;
printf("-->> i = %d \n", i);
num--;
}
va_end(ap);
return result;
} int add2(int * arg , ...){
va_list p_va;
int *p_arg = NULL;
int result = *arg;
va_start(p_va,arg);
p_arg = va_arg(p_va,int*);
while(p_arg!=NULL){
result = result + *p_arg;
printf("-->> *p_arg = %d \n", *p_arg);
p_arg = va_arg(p_va,int*);
}
va_end(p_va);
return result;
}

end

c 可变参数 定义可变参数的函数的更多相关文章

  1. python函数传入参数(默认参数、可变长度参数、关键字参数)

    1.python中默认缺省参数----定义默认参数要牢记一点:默认参数必须指向不变对象! 1 def foo(a,b=1): 2 print a,b 3 4 foo(2) #2 1 5 foo(3,1 ...

  2. C语言利用va_list、va_start、va_end、va_arg宏定义可变参数的函数

    在定义可变参数的函数之前,先来理解一下函数参数的传递原理: 1.函数参数是以栈这种数据结构来存取的,在函数参数列表中,从右至左依次入栈. 2.参数的内存存放格式:参数的内存地址存放在内存的堆栈段中,在 ...

  3. 详解Python函数参数定义及传参(必备参数、关键字参数、默认可省略参数、可变不定长参数、*args、**kwargs)

    详解Python函数参数定义及传参(必备参数.关键字参数.默认可省略参数.可变不定长参数.*args.**kwargs) Python函数参数传参的种类   Python中函数参数定义及调用函数时传参 ...

  4. python基础语法5 函数定义,可变长参数

    函数 1.什么是函数 函数就是一种工具. 可以重复调用 2.为什么要用函数 1.防止代码冗(rong)余 2.代码的可读性差 3.怎么用函数 1.定义函数-->制造工具 2.调用函数--> ...

  5. python-函数中定义可变参数

    可变参数 在Python函数中,还可以定义可变参数.顾名思义,可变参数就是传入的参数个数是可变的,可以是1个.2个到任意个,还可以是0个. 我们以数学题为例子,给定一组数字a,b,c……,请计算a2 ...

  6. python中的函数的参数和可变参数

    最近在搞python的过程中需要用到给函数传可变参数..所以去网上找前人的帖子学习了一下 为了尊重原作者,这里附上链接:http://www.cnblogs.com/tqsummer/archive/ ...

  7. (转)用库函数stdarg.h实现函数参数的可变

    原文地址:https://blog.csdn.net/jinkui2008/article/details/1967055 #define _INTSIZEOF(n)   ( (sizeof(n) + ...

  8. 函数、可变参数、keyword-only参数、实参解构

    函数的数学定义:y=f(x) ,y是x的函数,x是自变量.y=f(x0, x1, ..., xn) python中的函数: 由函数名称.参数列表.和若干语句组成的语句块构成,完成一定的功能,是组织代码 ...

  9. Python之定义可变参数

    如果想让一个函数能接受任意个参数,我们就可以定义一个可变参数: def fn(*args):    print args 可变参数的名字前面有个 * 号,我们可以传入0个.1个或多个参数给可变参数: ...

随机推荐

  1. linux登录windows服务器

    在公司同时也兼顾了王老师会议网站的任务,我喜欢用linux,而会议网站托管在windows系统上,虽然装了双系统,但我还是比较懒,不喜欢经常切换系统.还好,linux可以实现登录windows服务器. ...

  2. InPageError c000009c使用chkdsk修复磁盘

    chkdsk e: /f /r 回车运行就表示修复e盘上的错误,并找到坏扇区恢复可读取的信息. 其它: [Path} FileName] 指定需要 chkdsk 检查碎片整理的文件或文件集的位置和名称 ...

  3. 基于visual Studio2013解决面试题之1310随机数

     题目

  4. android怎样实现自动点击功能

    一个按钮之类的控件的自动点击的话,可以定时调用 button.performClick();

  5. google2013校园招聘笔试题(全国)

    google2013校园招聘笔试题 1. 单项选择题1.1如果把传输速率定义为单位时间内传送的信息量(以字节计算)多少.关于一下几种典型的数据传输速率:1.使用USB2.0闪存盘,往USB闪存盘上拷贝 ...

  6. 同一个form里,不管哪个 submit 都是直接提交form表单里的内容

    要达到你的目的,就不能用类型为 submit 的按钮,要用 button,然后加onclick 方法来自定义预处理参数,然后再调用 submit 方法提交表单,比如 <script type=& ...

  7. Servlet的学习之Response响应对象(1)

    在之前学习了Servlet中的主体结构,包括Servlet的生命周期方法,和非生命周期方法能获取的一些非常重要的对象如ServletConfig.ServletContext对象等,而从这篇开始我们将 ...

  8. 延迟函数 比sleep效果好

    sleep是会阻塞线程的 网上有些延迟函数测试下来还是会阻塞,而接下来推荐的代码则不会   1 2 3 4 5 6 7 8 9 procedure delay(dwMilliseconds:integ ...

  9. ios23-文件上传

    1.上传图片 3. // //  ios23_uploadViewController.h //  ios23-upload // //  Created by  on 13-6-17. //  Co ...

  10. IT行业,需要经常锻炼,开篇从本钱开始

    今天下完班,和部门兄弟一起去打了两小时乒乓球,大汗淋漓,很痛快. 败给了两个高手,感觉年龄大了些,灵活性没有以前那么好了. 想想以前读书时,在整个学校都叱诧风云,如今即败给了几个老手,唉. 看来以后要 ...