您的位置:首页 > 编程语言 > C语言/C++

浅谈C语言C++中可变参数问题!!!

2015-06-15 08:35 302 查看
浅谈C语言C++中可变参数问题!!!这里只是抛砖引玉,简要说明其原理。

首先贴一段代码,用代码说话!

#include<iostream>
using std::cout;
using std::endl;

int add(int count ...) // count表示除count参数之后的参数个数
{ //此函数计算count参数之后的参数之和
// 如输入add(3,5,10,5)那么结果为 5+10+5 = 20
int *ptr = &count; //取得参数的地址
++ptr; // 后移一位
int sum = 0;
for(int i = 0; i < count; ++i)
sum += *(ptr+i); //依次获得后面参数的值
return sum;
}

int main()
{
cout<<add(5,1,2,3,4,5)<<endl; // 1 + 2 + 3 + 4 + 5 = 15
cout<<add(3,5,10,20)<<endl;  //  5 + 10 +20 = 35
system("pause");
return 0;
}


可以清晰地看到,可变参数就是基于函数参数在栈中的线性排布,通过第一个参数的地址依次取得后面参数的值,或者说高地址的值,printf函数就是基于这样的原理,只是多了一些对参数的分析与重新解释而已,原理一样。需要说明的是可变参数函数的调用约定为__cdecl,因为C语言C++的默认调用约定就是__cdecl

,这里不显式写出也可以。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: