定义可变参数的函数,需要在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个或多个参数给可变参数: ...
随机推荐
-
操作系统性能分析与优化V1.0
操作系统性能分析与优化V1.0 : http://www.docin.com/p-759561760.html
-
linux系统下的shell脚本
#!/bin/bash 说明我需要启用bin目录下的bash解释器解释脚本##将第一个文件拷贝到第二个文件,如果出错将错误输出到/dev/null 的空.if判断cp的返回值是否为1,1为成功,0为 ...
-
React-router v4教程
在这个教程里,我们会从一个例子React应用开始学习react-router-dom.其中你会学习如何使用Link.NavLink等来实现跳转,Switch和exact实现排他路由和浏览器路径历史. ...
-
junit 测试报错 java.lang.Exception: No runnable methods
转自:http://blog.csdn.net/snails_zx/article/details/51275894 在maven 项目中 建立测试类时,基类只用作加载spring配置文件,里面没有 ...
-
Grunt、Gulp区别 webpack、 requirejs区别
1. 书写方式 grunt 运用配置的思想来写打包脚本,一切皆配置,所以会出现比较多的配置项,诸如option,src,dest等等.而且不同的插件可能会有自己扩展字段,导致认知成本的提高,运用的时候 ...
-
lua api 官方文档 函数后面的方括号 说明 [-0, +0, –]
本博客注有“转”字样的为转载文章,其余为本人原创文章,转载请务必注明出处或保存此段.c++/lua/windows逆向交流群:69148232 每一个lua api 函数结尾都给出了这样的说明例如: ...
-
IntelliJ IDEA教程之如何clean或者install Maven项目
一.前言 Eclipse中如果我们想clean或者install工程,我们只需要右键工程,然后找到run->Maven install 或者run->Maven clean就可以了,但是I ...
-
[Windows]_[中级]_[崩溃报告的中级解决方案]
场景 1.在Windows上用C/C++开发软件, 经常会出现软件级别的崩溃情况, 如果用户看到这种崩溃报告, 那么一般会认为软件质量不高, 从而不想用. Windows上就会有崩溃报告这种噢给你工具 ...
-
Codeforces Beta Round #7 A. Kalevitch and Chess 水题
A. Kalevitch and Chess 题目连接: http://www.codeforces.com/contest/7/problem/A Description A famous Berl ...
-
ELK出现unassigned_shards查看及删除
问题 用3台服务器搭建了ELK系统,有一天出现有几个索引一直无法同步,重启了elasticsearch也不行 如下图:elk-cluster一直处于red状态 解决方法 一,查看elasticsear ...