c语言基于stdarg.h的可变参数函数的用法
C说话编程中偶然会碰着一些参数个数可变的函数,本文具体讲授了可变参数函数的实现道理,分享给各人 在开始进修C说话的函数的时辰,我们就知道函数的参数个数应该是在函数声明的时辰就指定的,这一点我们没有任何疑问。可是不知道各人有没有留意到我们的printf()函数,他的函数参数理论上并不是确定的,而是跟着匹配字符串中的名目节制符的个数节制的。着实其时也没有留意到这一点,到是最近,偶尔间看到了 《嗨翻C说话》 这本书,这里就具体讲授了这种可变参数函数的实现道理,本日测验间隙就顺带进修了一下,着实就是一种要领,知道了就晓得了,也长短常的简朴。 头文件 这个用法必要引用一些宏,这些宏界说在C尺度库“stdarg.h”中,(虽然C++中就是“cstdarg”了)。 函数声明 int fun(int arg1,int arg2,...){ //foo }
详细用法 这里首要涉及到va_list范例,va_start()、va_arg()、va_end()这几个函数。 va_list 可以领略为以链表的情势生涯那些可变参数的一个数据范例(既然是链表,虽然是可变的了)。 void va_start(va_list ap,int len); 接管两个参数,一个是上面的谁人对象,尚有一个暗示数据的数量。目测可以领略为是自动网络传给本函数的可变参数,并连带他的数量,将信息赋给 va_list 。 type va_arg(va_list ap,type ); 接管两个参数,一个是va_list,另一个是生涯的数据的范例。由于在挪用参数的时辰,编译器不会搜查现实输入的是什么参数,以是必要当令的指定,并以谁人范例返回。留意,这时辰在va_list中的某个指针会指向下一个元素,以是下一次挪用时输出的值就是下一个元素。在这一点上用法相同于iterator。 void va_end(va_list ap);最后整理这个va_list. 演示源码 #include<stdarg.h> #include<stdio.h> void print(intarg,...){ va_list ap; va_start(ap,arg); for (int i = 0; i < arg; i++){ printf("%d ",va_arg(ap,int)); } va_end(ap); } int main(){ print(4,1,2,3,4); } 功效天然是输出 1 2 3 4。 声名 固然看上去结果很酷,可是现实上听嗣魅这种用法简直很不安详,轻易造成运行错误,以是照旧只管要罕用。这种相同的题目假如能用重载可能类来办理的话照旧罕用可变参数函数吧。 以上就是本文的所有内容,但愿对各人的进修有所辅佐,也但愿各人多多支持编程小能力。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |