可选性自变量
来源:互联网 发布:mac android 文件传输 编辑:程序博客网 时间:2024/04/20 11:25
C语言允许定义自变量数量可变的函数,这称为Variadic函数。
这样的函数需要固定数目的强制性自变量(mandatory argument),后面是数量可变的可选性自变量。这种函数必须有“至少一个”强制性自变量。可选性自变量的类型可能会变,其数量可能由“强制性自变量的值”决定,或者由“用来定义可选性自变量列表的特殊值”决定。
C语言中最有名的variadic函数是printf()和scanf()。这两个variadic函数都一个强制性自变量,也就是格式化字符串;格式化字符串的转化修饰符聚顶可选性自变量的数量和类型。
对于一个强制的变量来说,函数头会显示一个适当的参数,像一般的函数声明一样。参数列表的规格是强制性参数在前,后面跟着一个逗号和省略号,这个省略号就代表可选性自变量。
variadic函数要存取可选性自变量时,必须通过一个类型为va_list的对象,它包含了自变量的信息。这种类型的对象也称为“自变量指针”(argument point),它最少包含此堆栈中一个自变量的位置。可以使用这个自变量指针迁移到下一个可选性自变量,如此,函数就可以存取所有的可选性自变量。va_list类型被定义在stdarg.h中。
编写支持“可选性自变量”的函数时,必须使用va_list类型定义变量指针,以存取可选性自变量;可以用四个宏来处理此变量指针,这四个宏也被定义在stdarg.h中。
void va_start( va_list argptr, lastparam );
va_start使用第一个可选性自变量初始化argptr,lastparam必须是“此函数最后一个有名字的参数”的名称。开始使用可选性自变量之前,必须调用此宏。
type va_arg( va_list argptr, type );
va_arg会取得目前argptr所指的可行性自变量,也会将argptr前移到下一个自变量。type是“刚刚读入”的自变量的类型。
void va_end( va_list argptr );
当不再需要自变量指针时,必须使用该宏。如果想使用va_start或va_copy来重新初始化一个之前用过的自变量指针,也得先调用va_end。
void va_copy( va_list dest, va_list src );
va_copy使用目前的src来初始化dest。
下面给一个演示这些宏的使用方法
这样的函数需要固定数目的强制性自变量(mandatory argument),后面是数量可变的可选性自变量。这种函数必须有“至少一个”强制性自变量。可选性自变量的类型可能会变,其数量可能由“强制性自变量的值”决定,或者由“用来定义可选性自变量列表的特殊值”决定。
C语言中最有名的variadic函数是printf()和scanf()。这两个variadic函数都一个强制性自变量,也就是格式化字符串;格式化字符串的转化修饰符聚顶可选性自变量的数量和类型。
对于一个强制的变量来说,函数头会显示一个适当的参数,像一般的函数声明一样。参数列表的规格是强制性参数在前,后面跟着一个逗号和省略号,这个省略号就代表可选性自变量。
variadic函数要存取可选性自变量时,必须通过一个类型为va_list的对象,它包含了自变量的信息。这种类型的对象也称为“自变量指针”(argument point),它最少包含此堆栈中一个自变量的位置。可以使用这个自变量指针迁移到下一个可选性自变量,如此,函数就可以存取所有的可选性自变量。va_list类型被定义在stdarg.h中。
编写支持“可选性自变量”的函数时,必须使用va_list类型定义变量指针,以存取可选性自变量;可以用四个宏来处理此变量指针,这四个宏也被定义在stdarg.h中。
void va_start( va_list argptr, lastparam );
va_start使用第一个可选性自变量初始化argptr,lastparam必须是“此函数最后一个有名字的参数”的名称。开始使用可选性自变量之前,必须调用此宏。
type va_arg( va_list argptr, type );
va_arg会取得目前argptr所指的可行性自变量,也会将argptr前移到下一个自变量。type是“刚刚读入”的自变量的类型。
void va_end( va_list argptr );
当不再需要自变量指针时,必须使用该宏。如果想使用va_start或va_copy来重新初始化一个之前用过的自变量指针,也得先调用va_end。
void va_copy( va_list dest, va_list src );
va_copy使用目前的src来初始化dest。
下面给一个演示这些宏的使用方法
- //double add( int n, ... ) 累加可选性自变量的函数
- //自变量:n:可选性自变量的数目
- // 可选性自变量的类型是double
- //返回值:累加和,类型是double
- double add( int n, ... )
- {
- int i = 0;
- double sum = 0;
- va_list argptr; //声明argptr
- va_start( argptr, n ); //初始化argptr
- for ( i = 0; i < n; ++i ) //对每个可选性自变量
- sum += va_arg( argptr, double ); //读取类型为double的自变量
- va_end( argptr ); //累加
- teturn sum;
- }
- 可选性自变量
- 16.6 Swift可选链不会增加可选类型的可选性
- 005 函数极限之自变量趋于无穷大时的极限及函数性质之唯一性
- makefile 中的自变量
- php 使用命令行自变量
- Matlab循环自变量问题
- Logistic Regression -- 单自变量
- 模板参数 自变量推导
- 预设模板自变量
- 基本概念:自变量和协变量
- 煤炭可选性曲线模型的改进
- Swift中级学习1 可选性
- 访问JNI函数:JNIEnv自变量
- 访问JNI函数:JNIEnv自变量
- 9.1 套接字可选性和IO缓冲大小
- 可选参数
- 可选配置
- 可选链
- WPARAM 和 LPARAM,消息响应机制
- 控件
- 中间件的基础知识
- 请问:Scanner类与System.in类有什么区别??方法都有哪些????
- Java对.NET的经典比较
- 可选性自变量
- 实现全选或全不选js
- 测试管理一点点建议
- 自动日期输入
- j2ee,ssh资源网站
- 好东东--找到的极品
- vb.net 2005 操作WORD中的表格
- 163.com的tab效果
- 防电脑辐射有妙招