该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

但是请注意,由於 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语言中不定参数的实现相关推荐

  1. c语言如何实现不定参数,C语言中不定参数的实现

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 但是请注意,由於 K&R C 中并不检查参数型态,so 在此是用 ANSI C 来说明,毕竟 ANSI C 是目前所有 C Compiler 都支 ...

  2. C语言里 指针变量强制类型转换,C语言之强制类型转换与指针--#define DIR *((volatile unsigned int *) 0x0022)...

    强制类型转换形式:(类型说明符) (表达式) 举例说明:1) int a; a = (int)1.9; 2)char *b; int *p; p = (int *) b; //将b的值强制转换为指向整 ...

  3. c语言不定参数个数,C语言中不定参数的实现

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 但是请注意,由於 K&R C 中并不检查参数型态,so 在此是用 ANSI C 来说明,毕竟 ANSI C 是目前所有 C Compiler 都支 ...

  4. C语言如何处理不定长度参数,C语言中不定参数的实现

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 但是请注意,由於 K&R C 中并不检查参数型态,so 在此是用 ANSI C 来说明,毕竟 ANSI C 是目前所有 C Compiler 都支 ...

  5. c语言不定参数的使用,C语言中不定参数的实现

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 但是请注意,由於 K&R C 中并不检查参数型态,so 在此是用 ANSI C 来说明,毕竟 ANSI C 是目前所有 C Compiler 都支 ...

  6. c语言里 t是什么作用,c语言里的\t是什么意思

    c语言里的\t是什么意思以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c语言里的\t是什么意思 正宗叫法是" ...

  7. java中重载 参数顺序_Java方法中的参数太多,第4部分:重载

    java中重载 参数顺序 期望将过多的参数传递给Java方法的问题之一是,该方法的客户端很难确定它们是否以适当的顺序传递了适当的值. 在以前的文章中,我描述了如何使用自定义类型 , 参数对象和构建器来 ...

  8. java自定义方法参数注解_Java方法中的参数太多,第1部分:自定义类型

    java自定义方法参数注解 我认为构造函数和方法中冗长的参数列表是Java开发中的另一个" 危险信号 ",就逻辑和功能而言,它们不一定是"错误的",但通常暗示当 ...

  9. java 可变参数方法_Java方法中的参数太多,第7部分:可变状态

    java 可变参数方法 在我的系列文章的第七篇中,有关解决Java方法或构造函数中过多参数的问题 ,我着眼于使用状态来减少传递参数的需要. 我等到本系列的第七篇文章来解决这个问题的原因之一是,它是我最 ...

最新文章

  1. a标签代替input[button]
  2. BZOJ4653 洛谷1712 UOJ222:[NOI2016]区间——题解
  3. ajax post提交数据_详解Ajax异步加载
  4. 如何在Twitter上阻止令人讨厌的“今日热门新闻@yourname”垃圾邮件
  5. Netbackup detected IBM drives as unusable
  6. python创建socket对象_python---一个简单的socket
  7. python60行绘图程序_不敢相信,60行python代码就写出了贪吃蛇游戏
  8. STM8S——Analog/digital converter (ADC)
  9. linux系统32位镜像下载,深度Linux Deepin镜像下载
  10. 编程十年 (13):毁人不倦1
  11. 下关便装特沱微刻辩识
  12. ansys 服务器无响应,ansys链接不到本地服务器
  13. android 自动加微信群,如何完美实现微信自动发朋友圈自动添加好友等等
  14. ios:应用发布App Store流程
  15. hx1838 红外遥控(1):接收时序的解码
  16. 机器学习_4.隐马尔可夫模型初识
  17. 用python绘制heatmap
  18. Springboot后台HTML/富文本转图片
  19. c语言中向计算机输入一个字符的函数是,计算机c语言输入输出函数格式详解.docx...
  20. C语言输出九九乘法表(倒三角形输出)。

热门文章

  1. html float作用,CSS float相关详解
  2. a按钮居中显示 bootstrap_Excel合并后居中,跨越合并,及跨列居中的区别你都知道吗...
  3. windows共享linux的某一文件夹
  4. Linux 服务器更换主板后,网卡识别失败的处理方法
  5. 简单使用DESeq2/EdgeR做差异分析
  6. EggNOG功能注释数据库在线和本地使用
  7. R语言ggplot2可视化散点图、移除可视化图像中的网格线(remove gridlines)
  8. R语言plotly可视化:使用PCA算法进行数据降维、使用plotly可视化PCA所有的主成分绘制散点图矩阵、降维后的两个(三个)核心主成分的二维、三维可视化图形、方差解释的量、载荷图等
  9. R语言dplyr包mutate_if函数修改所有满足条件的数据列的内容实战
  10. python分数运算使用Fraction模块