重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
void fun1(int a, int b, const char *fmt, ...);
成都创新互联公司是一家集网站建设,张家口企业网站建设,张家口品牌网站建设,网站定制,张家口网站建设报价,网络营销,网络优化,张家口网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
void fun2(const char *fmt, ...);.
你注意了,参数传递的可是const类型的,不可以改变哦~
传递出来的args当然也不会有变化。
(奇怪的是你的编译器没有报错吗?晕啊……)
#include stdarg.h //可变参数函数必要的头文件
#include stdio.h
long int sum(unsigned int argc,...) //可变参数函数必须包含至少一个确定的参数
{
long int srt=0;
int va;
unsigned int i;
va_list vl; //用于指向可变参数列表
va_start(vl,argc); //初始化,va_start()调用的第一个参数是所编写的可变参数函数的最后一个确定的参数
for (i = 0; iargc; i++) {
srt+=(int)va_arg(vl,int); //从参数列表按提取一个int类型的值参与相加运算
}
va_end(vl); //清理
return srt;
}
int main(int argc, char* argv[])
{
printf("%ld\n",sum(3,1,2,3));
return 0;
}
前言:
有时候我们需要一个函数接口可以支持可变参数以提高其泛化能力,比如说定义一个求和函数,对传入的所有参数进行求和并返回,C语言提供了一种可变参数的方式来帮助我们实现。
原理:
函数参数是从右向左线性连续依次入栈,如果我们可以知道可变参数列表的前一个参数的地址和类型,就可以得知可变参数列表的首地址,进而根据每个参数的类型取出相应的数据。简单来说就是将栈里面的数据,按照指定类型的大小,依次取出。
具体实现:
步骤解析: