c 可变参数 定义可变参数的函数
定义可变参数的函数,需要在stdarg.h
头文件中定义的va_list
类型和va_start
、va_arg
、va_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 可变参数 定义可变参数的函数的更多相关文章
- python函数传入参数(默认参数、可变长度参数、关键字参数)
1.python中默认缺省参数----定义默认参数要牢记一点:默认参数必须指向不变对象! 1 def foo(a,b=1): 2 print a,b 3 4 foo(2) #2 1 5 foo(3,1 ...
- C语言利用va_list、va_start、va_end、va_arg宏定义可变参数的函数
在定义可变参数的函数之前,先来理解一下函数参数的传递原理: 1.函数参数是以栈这种数据结构来存取的,在函数参数列表中,从右至左依次入栈. 2.参数的内存存放格式:参数的内存地址存放在内存的堆栈段中,在 ...
- 详解Python函数参数定义及传参(必备参数、关键字参数、默认可省略参数、可变不定长参数、*args、**kwargs)
详解Python函数参数定义及传参(必备参数.关键字参数.默认可省略参数.可变不定长参数.*args.**kwargs) Python函数参数传参的种类 Python中函数参数定义及调用函数时传参 ...
- python基础语法5 函数定义,可变长参数
函数 1.什么是函数 函数就是一种工具. 可以重复调用 2.为什么要用函数 1.防止代码冗(rong)余 2.代码的可读性差 3.怎么用函数 1.定义函数-->制造工具 2.调用函数--> ...
- python-函数中定义可变参数
可变参数 在Python函数中,还可以定义可变参数.顾名思义,可变参数就是传入的参数个数是可变的,可以是1个.2个到任意个,还可以是0个. 我们以数学题为例子,给定一组数字a,b,c……,请计算a2 ...
- python中的函数的参数和可变参数
最近在搞python的过程中需要用到给函数传可变参数..所以去网上找前人的帖子学习了一下 为了尊重原作者,这里附上链接:http://www.cnblogs.com/tqsummer/archive/ ...
- (转)用库函数stdarg.h实现函数参数的可变
原文地址:https://blog.csdn.net/jinkui2008/article/details/1967055 #define _INTSIZEOF(n) ( (sizeof(n) + ...
- 函数、可变参数、keyword-only参数、实参解构
函数的数学定义:y=f(x) ,y是x的函数,x是自变量.y=f(x0, x1, ..., xn) python中的函数: 由函数名称.参数列表.和若干语句组成的语句块构成,完成一定的功能,是组织代码 ...
- Python之定义可变参数
如果想让一个函数能接受任意个参数,我们就可以定义一个可变参数: def fn(*args): print args 可变参数的名字前面有个 * 号,我们可以传入0个.1个或多个参数给可变参数: ...
随机推荐
- 查询SystemFeature的方法
查询SystemFeature的方法可以在adb shell下敲如下的命令: dumpsys package 然后搜feature关键字. 例如,我的平台的SystemFeature,如下所示: Fe ...
- three.js 源代码凝视(十)Math/Line3.js
商域无疆 (http://blog.csdn.net/omni360/) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:商域无疆 - 本博客专注于 敏捷开发 ...
- 利用d3.js绘制中国地图
d3.js是一个比較强的数据可视化js工具. 利用它画了一幅中国地图,例如以下图所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3ZhcDE=/ ...
- QQ登录-第三方SDK的接入总结
由于项目的需要,使用了[QQ登录]SDK 的相关功能! 1.集成[QQ登录]SDK [QQ登录]SDK下载地址: http://wiki.open.qq.com/wiki/website/SD ...
- 异步的两种写法: async 与 BeginInvoke
现在要实现异步只要用关键字async/await就可以轻松实现,在此之前需要用到委托/回调等一堆东西. 对一下是对比写法: class Program { delegate string SendMe ...
- 第1章 软件测试基本概念(Week1,3月3日)
一.对软件的认识 1. 什么是软件 2. 软件的分类 3. 软件开发的生命周期模型 (1)瀑布模型 (2)Scrum 其实对用瀑布模型这种臃肿不堪.要求严格.而无法适应软件开发周期变化的开发模型,渐渐 ...
- 【HTTP】Fiddler(二) - 使用Fiddler做抓包分析
上文( http://blog.csdn.net/ohmygirl/article/details/17846199 )中已经介绍了Fiddler的原理和软件界面.本文主要针对Fiddler的抓包处理 ...
- Eclipse相关集锦第二季
Eclipse相关的问题第二季开始了,这些问题都是我平时遇到的,然后记录下来备忘,帮助到别人最好不过了. 1.Unable to execute dex: GC overhead limit exce ...
- File Templates for web.xml & web-fragment.xml (Servlet 2.3, 2.4, 2.5 + 3.0)
As I sometimes need these, I have compiled a list of the valid headers of the web.xml and web-fragme ...
- Linux注销在线用户
与Windows系统类似,Linux系统上也有注销在线用户的方法,我们可以使用pkill命令,详细的步骤如下: . 首先使用w或who命令查看在线用户,确定用户所在TTY [root@iavp232 ...