c 可变参数 定义可变参数的函数

时间:2021-09-04 03:38:50

定义可变参数的函数,需要在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函数传入参数&lpar;默认参数、可变长度参数、关键字参数)

    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&lowbar;list、va&lowbar;start、va&lowbar;end、va&lowbar;arg宏定义可变参数的函数

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

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

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

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

    函数 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&period;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. 操作系统性能分析与优化V1&period;0

    操作系统性能分析与优化V1.0 : http://www.docin.com/p-759561760.html

  2. linux系统下的shell脚本

    #!/bin/bash  说明我需要启用bin目录下的bash解释器解释脚本##将第一个文件拷贝到第二个文件,如果出错将错误输出到/dev/null 的空.if判断cp的返回值是否为1,1为成功,0为 ...

  3. React-router v4教程

    在这个教程里,我们会从一个例子React应用开始学习react-router-dom.其中你会学习如何使用Link.NavLink等来实现跳转,Switch和exact实现排他路由和浏览器路径历史. ...

  4. junit 测试报错 java&period;lang&period;Exception&colon; No runnable methods

    转自:http://blog.csdn.net/snails_zx/article/details/51275894 在maven 项目中  建立测试类时,基类只用作加载spring配置文件,里面没有 ...

  5. Grunt、Gulp区别 webpack、 requirejs区别

    1. 书写方式 grunt 运用配置的思想来写打包脚本,一切皆配置,所以会出现比较多的配置项,诸如option,src,dest等等.而且不同的插件可能会有自己扩展字段,导致认知成本的提高,运用的时候 ...

  6. lua api 官方文档 函数后面的方括号 说明 &lbrack;-0&comma; &plus;0&comma; –&rsqb;

    本博客注有“转”字样的为转载文章,其余为本人原创文章,转载请务必注明出处或保存此段.c++/lua/windows逆向交流群:69148232 每一个lua api 函数结尾都给出了这样的说明例如: ...

  7. IntelliJ IDEA教程之如何clean或者install Maven项目

    一.前言 Eclipse中如果我们想clean或者install工程,我们只需要右键工程,然后找到run->Maven install 或者run->Maven clean就可以了,但是I ...

  8. &lbrack;Windows&rsqb;&lowbar;&lbrack;中级&rsqb;&lowbar;&lbrack;崩溃报告的中级解决方案&rsqb;

    场景 1.在Windows上用C/C++开发软件, 经常会出现软件级别的崩溃情况, 如果用户看到这种崩溃报告, 那么一般会认为软件质量不高, 从而不想用. Windows上就会有崩溃报告这种噢给你工具 ...

  9. Codeforces Beta Round &num;7 A&period; Kalevitch and Chess 水题

    A. Kalevitch and Chess 题目连接: http://www.codeforces.com/contest/7/problem/A Description A famous Berl ...

  10. ELK出现unassigned&lowbar;shards查看及删除

    问题 用3台服务器搭建了ELK系统,有一天出现有几个索引一直无法同步,重启了elasticsearch也不行 如下图:elk-cluster一直处于red状态 解决方法 一,查看elasticsear ...