浅谈C/C++中可变参数的原理
作者:网络转载 发布时间:[ 2012/9/19 9:55:13 ] 推荐标签:
可以看到,其中 va_list实际上只是一个参数指针,va_start根据你提供的后一个固定参数来获取第一个可变参数的地址,va_arg将指针指向下一个可变参数然后返回当前值,va_end只是简单的将指针清0.
用下面的代码进行测试:
-
int main()
-
{
-
Sum(3, 10, 20, 30);
-
SumStr(5, "aa", "bb", "cc", "dd", "ff");
-
-
SumNew(3, 1, 2, 3);
-
SumStrNew(3, "12", "34", "56");
-
-
system("pause");
-
-
return 0;
-
}
|
结果如下:
.jpg)
我们上面的例子传的可变参数都是4字节的,如果我们的可变参数传的是一个结构体,结果会怎么样呢?
下面的例子我们传的可变参数是std::string
-
-
void SumStdString(int nCount, )
-
{
-
string str;
-
va_list vl = 0;
-
va_start(vl, nCount);
-
-
for(int i=0; i<nCount; ++i)
-
{
-
string p = va_arg(vl, string);
-
cout << p << endl;
-
str += p;
-
}
-
-
cout << "SumStdString:" << str << endl << endl;
-
}
-
int main()
-
{
-
Sum(3, 10, 20, 30);
-
SumStr(5, "aa", "bb", "cc", "dd", "ff");
-
SumNew(3, 1, 2, 3);
-
SumStrNew(3, "12", "34", "56");
-
string s1("hello ");
-
string s2("world ");
-
string s3("!");
-
SumStdString(3, s1, s2, s3);
-
system("pause");
-
return 0;
-
}
|
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。