1.也就是我们平常见到的一些最简单的
int ADD(int a,int b)
{
return a+b;
}
//int a,int b 这种类型 + 变量
指针参数
1.参数类型包含了指针
int ADD(int *a,int *b)
{
return *a+*b;
}
引用参数
1.参数类型包含了引用
int ADD(int &a,int &b)
{
return a+b;
}
缺省参数
1.缺省的意思是"我们可以设置一个默认的参数",这种写法在WIN32 API中很多
//申明
int CalcFunCtion(int a,int b,char flagC='+')
//定义
int CalcFunCtion(int a,int b,char flagC)
{
if(flagC=='+')
{
return a+b;
}
else if(flagC=='-')
{
return a-b;
}
//...
}
可变参数
1.参数列表有省略号(…),这个省略号代表可选参数。
2.当编写支持参数数量可变的函数时,必须用 va_list 类型定义参数指针,以获取可选参数。
3.可以用 4 个宏来处理该参数指针,这些宏都定义在头文件 stdarg.h 中
void va_start(va_list argptr, lastparam);
1.宏 va_start 使用第一个可选参数的位置来初始化 argptr 参数指针。该宏的第二个参数必须是该函数最后一个有名称参数的名称。
2.必须先调用该宏,才可以开始使用可选参数。
type va_arg(va_list argptr, type);
1.展开宏 va_arg 会得到当前 argptr 所引用的可选参数,也会将 argptr 移动到列表中的下一个参数。
2.宏 va_arg 的第二个参数是刚刚被读入的参数的类型。
void va_end(va_list argptr);
1.当不再需要使用参数指针时,必须调用宏 va_end。
2.如果想使用宏 va_start 或者宏 va_copy 来重新初始化一个之前用过的参数指针,也必须先调用宏 va_end。
展开宏 va_arg 会得到当前 argptr 所引用的可选参数,也会将 argptr 移动到列表中的下一个参数。
void va_copy(va_list dest, va_list src);
1.宏 va_copy 使用当前的 src 值来初始化参数指针 dest。然后就可以使用 dest 中的备份获取可选参数列表,从 src 所引用的位置开始。
综合案例// 函数ADD() 计算可选参数之和
// 参数:第一个参数指定了可选参数的数量,可选参数为int类型
// 返回值:和值,int类型
int ADD( int n, ... )
{
int iSum = 0;
va_list argptr;
va_start( argptr, n ); // 初始化argptr
for (int i = 0; i < n; i++ ) // 对每个可选参数,读取类型为int的参数,
iSum += va_arg( argptr, int); // 然后累加到sum中 这里要注意类型!为int类型名
va_end( argptr );
return sum;
}
迪大交流群:285530835



