十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章将为大家详细讲解有关怎么在c语言中利用stdarg.h实现一个可变参数函数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
目前创新互联公司已为上千多家的企业提供了网站建设、域名、雅安服务器托管、网站托管、服务器托管、企业网站设计、七星网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
头文件
这个用法需要引用一些宏,这些宏定义在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#include 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。
关于怎么在c语言中利用stdarg.h实现一个可变参数函数就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。