C语言可变参数的简单理解-计算最大值
可变参数是C里面的一个使用技巧,用宏来实现的,其实主要是根据一个可变参数指针,然后不断的往后移指针。
但是理解是怎么用的,还是比较容易的。
[cpp]
#include <stdarg.h>//<SPAN style="COLOR: #ff0000">使用可变参数需要的头文件</SPAN>
#include <stdio.h>
int max(int count, ...){
va_list ap;//1)定义一个可变参数,这个地方其实是一个指针,用于访问可变参数中的参数列表
va_start(ap,count);//2)初始化可变参数,并把刚定义的指针指向第一个参数。
int maximum = -1;//假设这都是正整数求最大值,如果不是,就可以把maximum设为最大的负数
int temp,i;
for(i = 0; i < count; i++) {
temp = va_arg(ap, int);//从可变参数列表指针的当前位置获取一个int型参数,并把指针指向下一个参数。
if(maximum < temp)
maximum = temp;
}
va_end(ap);//结束
return maximum;
}
int main(int argc,char **argv){
int ret_max = max(9,1,6,21,32,5,68,15,32,62);
printf("max in (9,1,6,21,32,5,68,15,32,62) is %d",ret_max);
return 0;
}
#include <stdarg.h>//使用可变参数需要的头文件
#include <stdio.h>
int max(int count, ...){
va_list ap;//1)定义一个可变参数,这个地方其实是一个指针,用于访问可变参数中的参数列表
va_start(ap,count);//2)初始化可变参数,并把刚定义的指针指向第一个参数。
int maximum = -1;//假设这都是正整数求最大值,如果不是,就可以把maximum设为最大的负数
int temp,i;
for(i = 0; i < count; i++) {
temp = va_arg(ap, int);//从可变参数列表指针的当前位置获取一个int型参数,并把指针指向下一个参数。
if(maximum < temp)
maximum = temp;
}
va_end(ap);//结束
return maximum;
}
int main(int argc,char **argv){
int ret_max = max(9,1,6,21,32,5,68,15,32,62);
printf("max in (9,1,6,21,32,5,68,15,32,62) is %d",ret_max);
return 0;
}
基本上使用可变参数,都是这几步曲:
在调用参数表之前,定义一个 va_list 类型的变量。va_list ap ;
对 ap 进行初始化,让它指向可变参数表里面的第一个参数,这是通过 va_start 来实现的,第一个参数是 ap 本身,第二个参数是在变参表前面紧挨着的一个变量;这时候,可以直接把ap作为参数给printf等函数来用的。如:printf(msg,ap);
如果需要自己获取参数的话,可以调用va_arg,对很多打印的业务来说,这一步不是必须的。调用 va_arg,它的第一个参数是 ap,第二个参数是要获取的参数的指定类型,然后返回这个指定类型的值,并且把 ap 的位置指向变参表的下一个变量位置;
获取所有的参数之后,我们有必要将这个 ap 指针关掉,以免发生危险,方法是调用 va_end,他是输入的参数 ap 置为 NULL,应该养成获取完参数表之后关闭指针的习惯,这也是一个惯例,并且是国际惯例。
补充:软件开发 , C语言 ,