C语言函数 变长参数
来源:互联网 发布:澳洲淘宝 编辑:程序博客网 时间:2024/04/29 14:49
用C语言实现拥有变长参数列表的函数,由于参数是顺序压栈的,所以可以由程序员自己利用指针取到每一个参数
void args_func( Type *arg0, ... )
{
Type *ap;
ap = ((Type *)&arg0) + sizeof(arg0);//取得栈顶地址加最后一个固定参数的地址偏移,得到第一个不定参数的地址
ap = ap + sizeof(type); //根据约定的不定参数类型取得下一个参数,每调用一次该句,取到下一个参数
...
}
变长参数列表至少有一个必有的参数,不能全部参数都为可选参数
在C语言里可以利用已定义好的一系列宏来实现变长参数:
#include<stdarg.h>//包含头文件
//假设有n个类型为Type的参数
void arg_func(int n,...)
{
int i;
Type temp;
va_list ap;//定义一个 va_list类型的变量ap
va_start(ap,int);//初始化ap,使其指向最后一个必选参数
for(i=0;i<n;i++)
temp = va_arg(ap,Type);//顺次取得所有参数
va_end(ap);
}
- C语言函数 变长参数
- c语言变长参数函数
- c语言——变长函数参数
- C语言变长参数
- C语言变长参数
- c语言变长参数
- C语言变长参数实现
- C语言变长参数处理
- C语言变长参数处理
- C语言中的变长参数
- C语言变长参数实现
- 转载:c语言变长参数函数的实现
- C语言中变长参数的函数的实现
- c语言中的变长函数
- C语言---变长参数列表---变长参数的使用
- C语言---变长参数列表---变长参数的传递
- C语言中 变长参数列表
- 也谈C语言变长参数
- 实用网站珍藏
- Java实例2 - 冒泡排序 Bubble Sort
- Java实例3 - 三角数字
- 素质教育,会呼吸的痛。
- Java实例4 - 快速计算二进制数中1的个数(Fast Bit Counting)
- C语言函数 变长参数
- Java实例5 - 考拉兹猜想 Collatz Conjecture
- Java实例6 - 汉诺塔问题 Hanoi
- Java实例7 - 选择排序 Selection Sort
- Java实例8 - 插入排序 Insertion Sort
- hibernate错误:at org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge.nextTimestamp
- Java实例9 - 汉明距离 Hamming Distance
- Java实例10 - 最小-最大规范化 Min-MaxNormalization
- 光为什么可以用复数表示?