可变参数
来源:互联网 发布:中搜网络到底怎么了 编辑:程序博客网 时间:2024/05/29 12:40
摘自网络的 C语言网络参数的用法
C语言中会遇到一些参数可变的函数,例如printf(),函数原型为
int printf(const char * format,...);
函数编辑器。
首先编写一个简单的可变参数的C函数
该函数至少有一个整数参数,其后是占位符...,表示后面的参数不固定,例子中的输入参数必须是整型
用来打印所有的参数。
#include "stdio.h"
#include "stdarg.h"
void simple_va_fun(int start,...)
{
va_list arg_ptr;
int nArgValue = start;
int nArgCount = 0;// 可变参数的数目
va_start(arg_ptr,start);// 以固定参数的地址为起点确定变参的内存起始地址。
do
{
++nArgCout;
printf("the %d th arg: %d\n",nArgCout,nArgValue);
nArgValue = va_arg(arg_ptr,int); //得到下一个可变参数的值
}while(nArgValue != -1)
return 0;
}
int mian(int argc,char* argv[])
{
simple_va_fun(100,-1);
simple_va_fun(100,200,-1);
return 0;
}
使用可变参数有以下的步骤
(1)在程序中使用以下宏
void va_start (va_list,arg_ptr,prev_param);
void va_arg(va_list arg_ptr,type);
void va_end(va_list arg_ptr);
va是指variable-argument(可变参数)的意思
va_start va_arg va_end 是在stdarg.h中以宏的形式实现的,由于硬件平台的不同,宏的定义
与实现也是不同的。
typedef char *va_list
#define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int)-1))
#define va_list(ap,v) (ap = (va_list)&v + _INTSIZEOF(v))
#define va_arg(ap,t) (*(t *)(ap += _INTSIZEOF(t) - _INTSIZEOF(t)))
#define va_end(ap) ( ap = (va_list)0 )
C语言中会遇到一些参数可变的函数,例如printf(),函数原型为
int printf(const char * format,...);
函数编辑器。
首先编写一个简单的可变参数的C函数
该函数至少有一个整数参数,其后是占位符...,表示后面的参数不固定,例子中的输入参数必须是整型
用来打印所有的参数。
#include "stdio.h"
#include "stdarg.h"
void simple_va_fun(int start,...)
{
va_list arg_ptr;
int nArgValue = start;
int nArgCount = 0;// 可变参数的数目
va_start(arg_ptr,start);// 以固定参数的地址为起点确定变参的内存起始地址。
do
{
++nArgCout;
printf("the %d th arg: %d\n",nArgCout,nArgValue);
nArgValue = va_arg(arg_ptr,int); //得到下一个可变参数的值
}while(nArgValue != -1)
return 0;
}
int mian(int argc,char* argv[])
{
simple_va_fun(100,-1);
simple_va_fun(100,200,-1);
return 0;
}
使用可变参数有以下的步骤
(1)在程序中使用以下宏
void va_start (va_list,arg_ptr,prev_param);
void va_arg(va_list arg_ptr,type);
void va_end(va_list arg_ptr);
va是指variable-argument(可变参数)的意思
va_start va_arg va_end 是在stdarg.h中以宏的形式实现的,由于硬件平台的不同,宏的定义
与实现也是不同的。
typedef char *va_list
#define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int)-1))
#define va_list(ap,v) (ap = (va_list)&v + _INTSIZEOF(v))
#define va_arg(ap,t) (*(t *)(ap += _INTSIZEOF(t) - _INTSIZEOF(t)))
#define va_end(ap) ( ap = (va_list)0 )
0 0
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- macOS下搭建Node.js环境
- SI分析:电路常用端接方法
- 陶陶摘苹果
- django 连接mysql(Python 2.7.5、django 1.10.5)
- 70. Climbing Stairs -Easy
- 可变参数
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- Java编程题练习2017-02-14
- 生成随机数
- hdu1015(暴力枚举。。。。)
- Java类加载机制
- RabbitMQ如何实现延迟队列?
- jQuery.fn.extend(); 和 jQuery.extend();的区别
- 开发工具: 搭建一个Linux开发环境