文章标题
来源:互联网 发布:阿里云的图标含义 编辑:程序博客网 时间:2024/06/06 08:42
在c语言中有一些函数的参数可变,例如scanf(),printf(),以printf()为例,它的定义如下
int printf(const char* format,…);
它除了有一个固定参数以外,其他参数都是了可变的
下面,我们写一个简单的可变参数函数,模拟实现printf,打印出来hello world
#include<stdio.h>#include<stdarg.h>void print(char* str, ...){ const char* p = NULL; char ch; char c; va_list arg; va_start(arg, str); while (*str) { switch (*str) { case's': p = va_arg(arg, const char*); while (*p) { putchar(*p); p++; } ++str; break; case'c': ch = va_arg(arg, char); putchar(ch); ++str; break; case' ': ++str; putchar(' '); break; case'\n': putchar('\n'); ++str; break; default: break; } } va_end(arg);}int main(){ print("s ccccc\n", "hello", 'w', 'o', 'r', 'l', 'd');}
运行结果如下
分析
1.声明一个va_list类型的变量arg,它用于访问参数未确定部分
2.这个变量是调用va_start来初始化的,它的第一个参数是va_list变量名,第二个变量是省略号前最后一个有名字的参数,初始化过程把
arg变量设置为了指向可变参数部分的第一个参数
3.为了访问参数需要使用va_arg,这个宏接受两个参数,va_list变量和参数列表下一个参数类型,在这个例子中所有可变参数类型为char,va_arg返回这个参数的值,并且使用va_arg指向下一个可变参数
4.最后当访问完了最后一个可变参数,需要使用va_end
可变参数的限制
1.可变参数必须逐个访问,如果想访问几个半途终止是可以的,但一开始就想访问中间参数是不可以的
2.这些宏无法直接判断参数的数量
3.在va_arg中指定对的类型
阅读全文
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- Java高并发程序设计(一)
- 【Go学习】理解Go语言中的函数闭包
- AndroidStudio翻译辅助工具(中译英与英译中)
- 坑1:前言中的代码下载
- svn仓库迁移及配置注意事项?
- 文章标题
- Java标示接口的介绍
- 由ArrayList构造函数源码引出的问题
- NFS
- Angular4_设置延时执行函数
- Wince 7.0 远程控制工具的使用
- 高等数学B(样卷)
- 首个单芯片超小封装I2C转PWM解决方案
- 安装完eric6,找不到启动的文件的解决办法