C语言可变参数函数
2014-01-14 16:48
253 查看
C语言有一种实现可变参数的函数的方法就是使用占位符,使用的方法就是采用如下的方式定义函数void frees(int size, ...)。其余的地方和一般的函数定义是一样的只是第二个参数上使用了三个点,而没用采用一般的变量类型变量名的方式。只要采用这样的定义方式,便可以使用这个函数来处理可变变量。但是光有这个定义还是不够的,还需要借助如下俩个函数一个类型定义,实际上这些函数是通过宏来实现的。
va_list
va_start();
va_arg();
va_list,这是个类型定义,我们可以把它理解成一个指针,它指向第一个参数的地址。如果,我们这样定义: va_list ap;则ap就是这样一种变量,它是指向所有参数中的第一个参数的。它不同于一般的指针变量,它是个复合变量。就是说可以通过这个变量找到,在调用这个函数是传入的其他变量。但是我们不可以直接通过移动这个指针来指向下一个变量。剩下的工作就要通过下面的两个方法了。
va_start(ap,size),那么ap就指向第一个参数size了,并且可得到size的类型int。这时候如果有下一个参数,就需要使ap指向下一个参数,并且得到它的类型。
va_arg(ap,类型),这样ap就指向一个参数,并且可以得到那个参数的类型了。注意!类型非常重要,学过指针的都应该清楚,指针的类型如果弄错的话,位置正确,取出来的数可能也是乱七八糟的。
下面是使用C语言的这个特征来编写的一个可以释放一系列内存空间的函数:
[cpp] view plaincopyprint?
void frees(int size, ...){
va_list ap;
int i=0;
va_start(ap, size);
for(i=0; i<size; i++){
void* ptr = va_arg(ap, void*);
free2(ptr);
}
}
在使用的时候只需指明需要释放的空间的指针的个数,以及他们的值,就可以了。
va_list
va_start();
va_arg();
va_list,这是个类型定义,我们可以把它理解成一个指针,它指向第一个参数的地址。如果,我们这样定义: va_list ap;则ap就是这样一种变量,它是指向所有参数中的第一个参数的。它不同于一般的指针变量,它是个复合变量。就是说可以通过这个变量找到,在调用这个函数是传入的其他变量。但是我们不可以直接通过移动这个指针来指向下一个变量。剩下的工作就要通过下面的两个方法了。
va_start(ap,size),那么ap就指向第一个参数size了,并且可得到size的类型int。这时候如果有下一个参数,就需要使ap指向下一个参数,并且得到它的类型。
va_arg(ap,类型),这样ap就指向一个参数,并且可以得到那个参数的类型了。注意!类型非常重要,学过指针的都应该清楚,指针的类型如果弄错的话,位置正确,取出来的数可能也是乱七八糟的。
下面是使用C语言的这个特征来编写的一个可以释放一系列内存空间的函数:
[cpp] view plaincopyprint?
void frees(int size, ...){
va_list ap;
int i=0;
va_start(ap, size);
for(i=0; i<size; i++){
void* ptr = va_arg(ap, void*);
free2(ptr);
}
}
在使用的时候只需指明需要释放的空间的指针的个数,以及他们的值,就可以了。
相关文章推荐
- C语言之函数可变参数
- C语言下的函数可变参数的使用
- C语言可变参数日志函数
- 【转】[转]C语言可变参数函数分析与实现
- C语言中实现可变参数函数
- C语言中的可变参数函数 三个点“…”printf( const char* format, ...) 博客分类: C语言 ANSI C CC++C#D语言编程 第一篇
- C语言可变长参数函数与默认参数提升
- c语言实现函数可变参数
- C语言 可变长参数函数的实现
- c语言中可变参数函数的设计(转)
- C语言中可变参数的函数使用技巧
- C语言可变长参数函数与默认参数提升
- GCC下,C语言参数的内存分配 以及 函数可变参数
- C语言可变参数函数详解 va_list va_arg va_start宏
- C语言中可变参数函数
- C语言:可变参数的函数(VA使用说明)
- C语言可变参数函数的实现
- C语言中可变参数函数实现原理
- C语言中可变参数函数的使用
- c语言中可变参数的原理---printf()函数