我想要实现的功能是:有个向量k[6]={200,300,400,500,600,700};我要用va_arg读取每一个值,照理来说 int j=va_arg(arg_ptr,int);循环后,指针就会自动挨个读数,但是运行结果和我想的不一样。求大神指点
// 用c++执行
#include <iostream>
#include <stdarg.h>
using namespace std;
void simple_va_fun(int i,int num,int num2,...);
int main(int argc,char *argv[])
{
// simple_va_fun(100);
// simple_va_fun(100,200);
int num=6;
int num2=3;
int k[6]={200,300,400,500,600,700};
simple_va_fun(100,6,3,k[0],'a','b','c');
return 0;
}
void simple_va_fun(int i,int num,int num2,...)//固定参数分别是i ,num,num2
{
va_list arg_ptr; //定义可变参数指针
va_start(arg_ptr,num2); // num2为最后一个固定参数,所以arg_ptr是num2地址的下一个地址,即第一个变量地址
for (int p=0;p<num;p++)//
{
int j=va_arg(arg_ptr,int); //重复获得整数值
printf( "%d\n",j);
} //返回每一个类型为int的可变参数,一直到第六个可变参数,第七个可变参数是a
//------------------------------------------要得到char类型数据----------------------------------
char k=va_arg(arg_ptr,char); //到了第七个变参数值,是a。注意,i,num,num2是固定参数值,num2后面的开始才是变参数值
printf( "%c\n",k);
va_end(arg_ptr); // 清空参数指针
return;
}
simple_va_fun(100,6,3,k[0],'a','b','c');
如上,可变参数只有四个,k[0],'a','b','c'。
k[1]至k[5]并没有传入函数。