C++为函数设置参数

来源:百度知道 编辑:UC知道 时间:2024/06/15 10:22:00
例子:
#include "stdafx.h"
#include "iostream.h"
#include "cstdarg"
void ConnectData(int i,...)
{
va_list ap; //什么意思?
va_start(ap,i); //这句是什么意思?
while(i--)
{
char* ctemp=va_arg(ap,char*); //这句是什么意思?
int itemp=va_arg(ap,int);//这句是什么意思?
float ftemp=va_va_arg(ap ,double);
cout<<ctemp<<"\n";
cout<<itemp<<"\n";
cout<<ftemp<<"\n";
}
va_end(ap);
}

int main()
{
ConnectData(2,“明天好”,2006,7.12,"同志们好",54,8.2)
Return 0
}
大虾们请告诉我吧。还有希望能告诉我程序运行结果。 char* ctemp=va_arg(ap,char*) va_start(ap,i)括号中是怎么回事?是定义了两个函数吗?
明天好,同志们好 是用char* ctemp=va_arg(ap,char*)付值给ctemp,再输出吗?可是指针变量不是应输出地址的吗?难道char* ctemp=va_arg(ap,char*)没有被调用吗?

回答"问题补充" char * 是一个字符串,每个元素是一个字符. 当输出用指向字符的指针应输出指向的字符串,一直遇到到'\0'为止

结果是
“明天好”
2006
7.12
"同志们好"
54
8.2
C/C++ 中 va_list()函数的可变参数列表
1:当无法列出传递函数的所有实参的类型和数目时,可用省略号指定参数表
void foo(...);
void foo(parm_list,...);

2:函数参数的传递原理
函数参数是以数据结构:栈的形式存取,从右至左入栈.eg:

先介绍一下可变参数表的调用形式以及原理:
首先是参数的内存存放格式:参数存放在内存的堆栈段中,在执行函数的时候,从最后一个开始入栈。因此栈底高地址,栈顶低地址,举个例子如下:
void func(int x, float y, char z);
那么,调用函数的时候,实参 char z 先进栈,然后是 float y,最后是 int x,因此在内存中变量的存放次序是 x->y->z,因此,从理论上说,我们只要探测到任意一个变量的地址,并且知道其他变量的类型,通过指针移位运算,则总可以顺藤摸瓜找到其他的输入变量。

下面是 <stdarg.h> 里面重要的几个宏定义如下:
typedef char* va_list;
void va_start ( va_list ap, prev_param ); /* ANSI version */
type va_arg ( va_list ap, type );
void va_end ( va_list ap );
va_list 是一个字符指针,可以理解为指向当前参数的一个指针,取参必须通过这个指针进行。
<Step 1> 在调用参数表之前,定义一个 va_list 类型的变量,(假设va_list 类型变量被定义为ap);
<Step