C语言可变参数解析
来源:互联网 发布:阿里云 自定义端口 编辑:程序博客网 时间:2024/06/03 15:01
C语言可变参数解析
C语言中有许多函数的参数个数是可变的,例如printf函数,它有printf("%d",a),printf("%d%d",a,b)等等,它的定义是这样的:
int printf( const char* format, ...);
它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的,例如我们可以有以下不同的调用方法:
printf("%d",i);
printf("%s",s);
printf("the number is %d ,string is:%s", i, s);
int printf( const char* format, ...);
它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的,例如我们可以有以下不同的调用方法:
printf("%d",i);
printf("%s",s);
printf("the number is %d ,string is:%s", i, s);
可变参数的个数如何控制?
1.用指针指向可变参数
2.用整型控制
3.最后参数设置为空
下面我们来探讨如何写一个简单的可变参数的C函数.写可变参数的C函数要在程序中用到以下这些宏:
void va_start( va_list arg_ptr, prev_param );
type va_arg( va_list arg_ptr, type );
void va_end( va_list arg_ptr );
va在这里是可变参数的意思.这些宏定义在stdarg.h中,所以用到可变参数的程序应该包含这个头文件.
void va_start( va_list arg_ptr, prev_param );
type va_arg( va_list arg_ptr, type );
void va_end( va_list arg_ptr );
va在这里是可变参数的意思.这些宏定义在stdarg.h中,所以用到可变参数的程序应该包含这个头文件.
va_list相当于char*,va_start()函数的功能是将指针指向第一个可变参数,并赋值给arg_ptr指针,&pre_param提供指针的起始位置;
可变函数可以以va_list arg_ptr语句开始,va_end(arg_ptr)语句结束;
va_arg()函数取出当前arg_ptr所指向的内存单元的值后,并使arg_ptr指向下一个参数即移动sizeof(type)个字节;
具体函数如何实现涉及到函数调用栈等方面的知识就不详细介绍啦,只说明函数执行后的结果!
一个小例题如下:
#include <stdio.h>#include <stdarg.h>void printlist(int begin,...){ va_list arg_ptr; char *p; va_start(arg_ptr,begin); p=va_arg(arg_ptr,char*); while(p!=NULL){ fputs(p,stdout); putchar('\n'); p=va_arg(arg_ptr,char*); } va_end(arg_ptr);}int main(void){ printlist(0,"hello","linux","c",NULL); return 0;}可变参数的函数原理其实很简单,va系列用宏定义来定义,实现跟栈相关,但调用arg_arg()函数时容易出错,可变参数的使用有利也有弊,所以在不必要的场合,我们无需用到可变参数.
- C语言可变参数解析
- C语言-可变参数列表的解析
- C语言中可变参数列表解析
- C语言_可变参数列表解析
- 解析c语言中可变参数列表
- c语言可变参数
- C语言可变参数
- C语言可变参数
- C语言可变参数
- c语言可变参数
- c语言可变参数
- C语言可变参数
- C语言可变参数
- C语言可变参数
- c 语言可变参数
- c语言可变参数
- c语言 可变参数
- c语言可变参数 ...
- DOS下检索XHCI下所有的USB设备,并显示出设备接在哪个端口上,以及该USB device的speed。
- 通过应用实例讨论Java多态的实现
- android内部存储器和外部存储器
- gcc static静态编译选项提示错误修正(/usr/lib/ld: cannot find -lc)
- 线性结构的特点
- C语言可变参数解析
- Assemble(王爽)——1、2、3章学习记录
- uva 10474
- ProgressBar的各种样式
- 提高BSEG簇表处理效率
- ABAP日期操作大全
- vc响应最大化最小化按钮的事件或消息 .
- wikipedia c language -c99
- android 下载编译环境配置