c语言不定参数的使用,C语言中不定参数的实现
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
但是请注意,由於 K&R C 中并不检查参数型态,so 在此是用 ANSI
C 来说明,毕竟 ANSI C 是目前所有 C Compiler 都支援的标准;常在
网路上看到有人推荐 K&R The C Programming Language 这本书,老
实说这本是不错(我以前也是看这本),但因为 K&R C 慢慢因为 ANSI
C 的完整标准出现,而面临考验,所以我建议若是初学者先从 ANSI C
看起,等对 ANSI C 的标准了解後,再回头看这本(其实不看也没差,虽
然它号称 C 语言圣经,但时代在变,有些东东开始不适用。不过还是有
看的价值)
//
// 固定的参数一定要放前面!!
int FUNC(int xx,...)
{
int tmp;
va_list arg_ptr; // 用va_list声明指向引数列表的 Pointer
va_start(arg_ptr,xx); // 从引数表中取得第一个引数
// 第一个引数就是 xx 自己(xx是最后一个固定变量)
tmp=va_arg(arg_ptr,int); // 从引数表中取得int 型态引数
// 一直呼叫 va_arg 即可取得所
// 有引数(第二个参数int是当前不定变量的类型 )
va_end(arg_ptr); // 取完後将 arg_ptr = NULL
// 以便归还 stack 空间(要在所有的不定变量引用完之后再用va_end(),否则会有无法预测的结果。)
}
理论上不定参数是可以无限多的,但碍於 memory 及 stack 大小
所以项数通常有上限,如 Turbo C 最多 200 个,一超过就出现如下
" Fatal stack overflow error-System halted ",然後当掉,你连
暖开机都不行;所以当你使用一套 Compiler 时一定要有其参考手册
或资料,以免搞半天除错後,还找不出原因!!
(P.S. 像 Turbo C 2.0 只能用 4000 个 if ,....太多要注意的!!)
说了一堆,不知道你会用了没?! 最後用一个画多边型的函数做□
例,顺便做结束。
/* EX */
#include // 记得要 include 才能用
#define END_P -400 // 用来判断是否为最後一个参数
void DrawPoly(int color,...)
{
va_list arg_ptr;
int x[200],y[200]; // 最多 200 个点
int p_c=0; // 计算有几点
int i; // 计数器
va_list(arg_ptr,color);
while(((x[p_c]=va_arg(arg_ptr,int))>END_P) \
&&((y[p_c]=va_arg(arg_ptr,int))>END_P)\
&& p_c<=200) // 不是最後一点且小於 200 个点
p_c++;
if(p_c<3) return ; // 不到 3 点不成一多边型,So 跳出
for(i=0;i
// 划线,每个 Compiler 不同,自行修改
line(x[i],y[i],x[i+1],y[i+1],color);
// 最後一条线
line(x[0],y[0],x[p_c-1],y[p_c-1],color);
va_end(arg_ptr);
}
c语言不定参数的使用,C语言中不定参数的实现相关推荐
- java方法带参数返回值_Java方法中的参数太多,第6部分:方法返回
java方法带参数返回值 在当前的系列文章中,我正在致力于减少调用Java方法和构造函数所需的参数数量,到目前为止,我一直专注于直接影响参数本身的方法( 自定义类型 , 参数对象 , 构建器模式 , ...
- url get参数 php,怎么取得Url中Get参数
这次给大家带来怎么取得Url中Get参数,取得Url中Get参数的注意事项有哪些,下面就是实战案例,一起来看一下. 此时可以使用js的方式得到当前页面的url中的get参数. 核心语句是:window ...
- vue2和vue3的参数接受方式以及vue中url参数解码
记录vue2和vue3的接受参数以及vue中url参数解码 vue2 this.$router.onReady(() => {let obj = this.$route.query.obj || ...
- java对url参数编码_对URL中的参数编码和解码
有时,我们希望点击页面中的链接跳转其他页面,并且以get的方式传递一些参数.如果不对这些参数编码,可能会造成一些问题: 1. 参数中的空格可能会让你无法打开页面 2. 参数中的&符号会影响 ...
- 8145v5 参数_如何估计模型中的参数
本文是我对使用软件计算模型中参数的过程概念理解的简介~!了解这有利于软件的使用者理解软件使用软件求解参数进行模型时的一堆琐碎的选项有帮助,也便于将药动学模型中的一些概念与数学中常用的一些概念联系起来. ...
- java 参数返回_Java基础---Java中带参数返回值方法的使用(四十)
Java 中带参带返回值方法的使用 如果方法既包含参数,又带有返回值,我们称为带参带返回值的方法. 例如:下面的代码,定义了一个 show 方法,带有一个参数 name ,方法执行后返回一个 Stri ...
- mysql中临时修改参数用什么关键字_postgresql 中的参数查看和修改方式
1.查看参数文件的位置 使用show 命令查看,比较常用的show config_file.此还可以查看pg_settings数据字典. test=# show config_file; config ...
- C语言基础知识入门和C语言入门基础知识大全
一.C语言基础知识入门 C语言一出现,就以其丰富的功能.强大的表达能力.灵活性.方便性和广泛的应用,在世界范围内迅速普及和普及.C语言不仅高效而且可移植.它可以用来开发应用软件.驱动程序.操作系统等. ...
- c语言定义max和命令,C语言#define定义函数
define是c语言中的预处理命令,它用于宏定义,可以提高源代码的可读性,为编程提供方便. 预处理命令以"#"号开头,如包含命令#include,宏定义命令#define等.一般都 ...
- C++中函数参数的默认值
文章目录 1 C++中函数参数的默认值 1.1 C++中函数参数的默认值 1.2 函数默认参数的规则 2 函数占位参数 2.1 函数占位参数 2.2 函数占位参数的意义 1 C++中函数参数的默认值 ...
最新文章
- Eclipse下FatJar插件的安装与使用
- python函数的参数类型,Python函数的主要参数类型
- C++变量、函数在内存中的情况
- Position定位
- 触发更新机制_王者荣耀1.14更新:11名英雄调整,韩信加强,鲁班大师重做
- 笨办法学 Python · 续 第一部分:预备知识
- 大数据应用项目创新大赛_经济管理学院大数据应用创新大赛顺利举行
- 大页内存的使用:HugePages(大内存页)的原理与使用
- EMNLP 2019 丨微软亚洲研究院精选论文解读
- 【11月29】PF 粒子滤波的多维运动模型代码
- [学习笔记]java基础Java8SE开发环境搭建、第一个Java Hello World、Java程序的编译与执行...
- Multisim 14.1 安装步骤
- 3dmax布尔运算差集后图形消失怎么办
- linux能力集机制,Linux能力(capability)机制的继承
- oracle怎么看今天星期几,oracle 判断今天是星期几
- html背景音乐教程pdf,HTML插入背景音乐方法【全】
- 2019年南京大学计算机研究生复试分数线,2019年南京大学研究生复试分数线
- html中字的属性设置,html怎么设置字体属性
- 直播APP开发技术原理分享
- 手机腾讯网前端框架MT2.1.0发布
热门文章
- 平衡树的深度与最少结点数问题
- 深夜不眠,爬起来写博客
- ValueError: could not broadcast input array from shape (*,*) into shape (*)
- DevExpress 换肤
- Java三大器之过滤器(Filter)的工作原理和代码演示
- Putty server refused our key的解决方法
- 关于自学的又一点思考
- Bmrxntfj.UIMapper界面对象映射
- TF-Lite极简参考-环境搭建
- OSChina 周二乱弹 —— 这样成功要到小护士姐姐的微信