写我的读书笔记关于可变参数
2006-12-27 15:37
288 查看
一、简单介绍变参的访问
变参函数,有一个以上的参数,参数个数不定。声明形式如下:
type Function(type arg1,...);
type Function(type arg1, type arg2,...);
在C语言中经常出现如下声明:
printf(const char * _Format, ...);
scanf(const char * _Format, ...);
这样的函数,其中它们的参数的个数是不确定的。
对于它们参数的访问可以通过以下宏进行处理:
首先、使用这些宏须引用#include <stdarg.h>
1)定义一个参数列表指针,(通过该指针遍历整个参数列表。)
va_list arg_ptr;
2)确定访问参数列表的起始位置,(也就是说从第几个参数开始取值。)
va_start(arg_ptr, argN); //第一个参数为1)所定义的列表指针,第二个参数是变参函数的参数名。
3)取得参数的值
int n = va_arg(arg_ptr, int); ///第一个参数为1)所定义的列表指针,第二个参数是变参函数的参数类型。
4)消空参数列表指针,(就是释放指针了)
va_end(arg_ptr);
二、举例说明
#include "stdlib.h"
#include "stdio.h"
#include <stdarg.h>
int Sum(int i, int j, int k, ...);
void main()
int Sum(int i, int j, int k, ...)
...{
va_list arg_ptr;//1)
int sum=0,n=i;
va_start(arg_ptr,i);//2)
while(n != 0)
...{
sum += n;
n = va_arg(arg_ptr,int); //3)
}
va_end(arg_ptr);//4
return sum;
}
三、其他说明
1)说明:va_start(arg_ptr,argN); argN是位于第一个可选参数之前的固定参数,(或者说,最后一个固定参数;…之前的一个参数)。
2)如何确定参数的类型。va_arg(arg_ptr,type); type的类型只有自己定义规则,进行分析,像在printf(_format,...),通过对fromat的分析,可以确定以后的参数列表的数据类型。
3)如何判定参数结束。实际上printf(),就是以后默认的'\0'作为结束的。
变参函数,有一个以上的参数,参数个数不定。声明形式如下:
type Function(type arg1,...);
type Function(type arg1, type arg2,...);
在C语言中经常出现如下声明:
printf(const char * _Format, ...);
scanf(const char * _Format, ...);
这样的函数,其中它们的参数的个数是不确定的。
对于它们参数的访问可以通过以下宏进行处理:
首先、使用这些宏须引用#include <stdarg.h>
1)定义一个参数列表指针,(通过该指针遍历整个参数列表。)
va_list arg_ptr;
2)确定访问参数列表的起始位置,(也就是说从第几个参数开始取值。)
va_start(arg_ptr, argN); //第一个参数为1)所定义的列表指针,第二个参数是变参函数的参数名。
3)取得参数的值
int n = va_arg(arg_ptr, int); ///第一个参数为1)所定义的列表指针,第二个参数是变参函数的参数类型。
4)消空参数列表指针,(就是释放指针了)
va_end(arg_ptr);
二、举例说明
#include "stdlib.h"
#include "stdio.h"
#include <stdarg.h>
int Sum(int i, int j, int k, ...);
void main()
int Sum(int i, int j, int k, ...)
...{
va_list arg_ptr;//1)
int sum=0,n=i;
va_start(arg_ptr,i);//2)
while(n != 0)
...{
sum += n;
n = va_arg(arg_ptr,int); //3)
}
va_end(arg_ptr);//4
return sum;
}
三、其他说明
1)说明:va_start(arg_ptr,argN); argN是位于第一个可选参数之前的固定参数,(或者说,最后一个固定参数;…之前的一个参数)。
2)如何确定参数的类型。va_arg(arg_ptr,type); type的类型只有自己定义规则,进行分析,像在printf(_format,...),通过对fromat的分析,可以确定以后的参数列表的数据类型。
3)如何判定参数结束。实际上printf(),就是以后默认的'\0'作为结束的。
相关文章推荐
- 我的java学习笔记(11)关于装箱、参数可变方法和枚举类型
- 关于Scala重写Java可变长参数方法
- java关于可变参数的使用
- 关于c++可变参数的理解
- C语音,关于可变参数的宏定义
- 关于iphone可变参数函数的定义
- 关于GCC和C99中可变参数宏
- 今天学习了关于C++ 中可变参数个数函数的使用!
- printf关于支持可变参数
- 关于Python中的参数定义及可变参数
- 关于可变参数列表和宏定义
- C语言关于可变参数函数的例子
- 关于PHP可变参数与缺省参数
- iOS 发大招 otherButtonTitles:(nullable NSString *)otherButtonTitles, ... 写法 && 编写通用类的时候关于可变参数的处理
- 关于可变的参数列表va_list的笔记
- 关于C/C++中可变参数的详细介绍(va_list,va_start,va_arg,va_end)
- 关于可变参数中需要用到的宏va_start,va_arg,va_end
- [问题记录]Java关于可变参数重载问题的测试
- 关于c中可变参数的一点学习
- Java中关于可变长参数的那些事