c语言可变长参数函数 c语言可变参数函数 例子

C语言 怎么调用一个可变参数的函数

你是指参数的个数可以变化? 比如文件操作函数fpritnf,它的参数是不确定的,可以是fprintf("%s%s","你好","他好");也可以是fprintf("%s%d%c","字符串",10086,'c'); 如果自己写一个参数变化的函数的话,呵呵,我没试过。

我们提供的服务有:网站设计制作、网站制作、微信公众号开发、网站优化、网站认证、楚雄州ssl等。为上千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的楚雄州网站制作公司

关于在C语言 声明带有一个变长数组参数的函数

在C语言中,函数中要用数组做参数,可以采用三种方式,其中后两种均可适用于变长数组参数。

1 直接以定长数组做参数,声明形式为:

ret_type func(int a[100]);

这里就是以100个元素的数组做参数的。

2 声明时不带长度,即:

ret_type func(int a[]);

3 以指针替代数组,即:

ret_type func(int *a);

2,3两种均可以用于变长数组。不过这种情况下,需要与函数约定数组长度的确定方法,比如约定规模 ,约定结束值,增加额外参数传长度,在数组元素中包含长度,或采用全局变量传长度等等。

c语言传递变长参数

按照你现在给出的代码,

print2(3, 100, 1, 2, 3);

输出的是1 2 3加上一位不确定值

因为va_start(vl, n);这一步理论上可以得到以a开头的va_list指针,但实际上由于编译器优化,它的效果和va_start(vl, a);是相同的

这一点,你可以打印出指针地址来确定一下

从你的代码推测,你是想让print2打印出后四个参数,包括a在内

即 100 1 2 3

如果是这样 可以用另一种方式做到

print2中,不要调用va_start

而是直接 vl=a;

如下

void print2(int n, int a, ...)

{

va_list vl;

// va_start(vl, n);//使用倒数第二个有名变量

vl = a;//编译器想优化 不让。 直接强势插入

vprint(n+1, vl);

va_end(vl);

}

可以试一下是否是你需要的效果。 如果不是 再追问


当前文章:c语言可变长参数函数 c语言可变参数函数 例子
分享地址:http://cdiso.cn/article/ddicdhd.html

其他资讯