当前位置:三九宝宝网 → 宝宝教育 → 教学论文 → 正文

C语言可变参数宏的问题

更新:12-30 整理:39baobao.com
字体:

[C语言中实际参数和形式参数的设置及传递方式]C语言中实际参数(实参)与形式参数(形参)之间的传递方式有传值和传地址两种函数调用方式。 下面通过举例来说明实参和形参的设置方法以及传值与传地址的两种函数调用方式。 值传...+阅读

先看个例子:

int Avg1(int num,...)

{

va_list list;

int sum = 0;

va_start(list,num);

for(int i=0;i

{

sum+=va_arg(list,int);

}

va_end(list);

return sum/num;

}

这是求平均值

int Avg1(int num, ...)

可变参数列表 必须至少包含一个参数, 这里给出数值的个数

va_start(list,num);

让列表list从num后取值,

至于为什么这样取值 牵扯到参数在内存中的存储方式

比如 int Avg1(int num, int a, int b, int c) 这个函数 参数在内存中存储在栈中, 顺序是:

num

a

b

c

num到c的地址依次增大

list从num用va_start标识取值位置之后,取值指针就加数据类型的长度, 指向a, 取完a,指向b,以此类推。。。

va_arg(list,int);

这个是把当前指向的值,以整形的形式取出。。

本文地址:https://www.39baobao.com/show/29_18211.html

以上内容来自互联网,请自行判断内容的正确性。若本站收录的信息无意侵犯了贵司版权,请联系我们,我们会及时处理和回复,谢谢.

以下为关联文档:

C语言参数传递?C语言不是用指针嘛,C中没有引用,那只是一种表示格式,C++中才有引用 &x这个代表传递的是地址,把地址传进去,那么此时相当于直接操作a和b #include <stdio.h> void swap(int *x, in...

c语言函数调用时参数是如何传递的建立中间变量(形参),把实参值赋值给中间变量,当被调函数返回值时,系统释放掉中间变量。 在程序中通过对函数的调用来执行函数体,其过程与其它语言的子程序调用相似。对无参函数调...

c语言中的可变参数这个问题可以这样考虑: 你在write_log()函数里调用了vfprintf()函数,其实这个vfprintf()就是一个可以接受你从上层函数传下来的可变参数串的函数。 你现在要在 log_info() 函数下...

C语言中如何实现可变参函数C语言中可变参函数实现,主要通过VA_LIST宏及相关操作的几个宏。 一、涉及宏及说明: 所有相关宏均定义在stdarg.h中。 1、va_list: 可变参数列表指针。 2、va_start:获取可变参数...

C语言可变参数列表#include <stdio.h> #include <stdarg.h> float max_list(int number...); void main() { float a = 3,b = 4,c = 5,d = 6; printf("max = %.2lf\n\n",max_list(4,a,b,c,d));...

c语言怎么写可变参数函数#include <stdarg.h&gt; //可变参数函数必要的头文件 #include <stdio.h> long int sum(unsigned int argc,...) //可变参数函数必须包含至少一个确定的参数 { long int srt=0...

c语言如何封装一个带有可变参数的方法需要借用C语言的VA_LIST 宏定义,及相关操作来实现可变参数。 VA_LIST 所在头文件:#include <stdarg.h&gt;,用法如下: (1)首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数...

C语言如何在可变参数函数中使用printf如psxf91所答,应使用v*系列的函数来实现。对比下printf与vprintf函数原型: 1 2 voidprintf(constchar*format, ...); voidvprintf(constchar*format, va_listap); 可以看出二...

急!高手请进请教c语言的可变参数函数如何求字符串长度要求出传入参数的总长度容易,代码附下(只做了%s%d%c的支持,其他可以自己做)。 但你申请了buf后,还要把这些变量拷到str中,需要考虑统计的时候把每个变量的长度和指针保存下来,申请b...