扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
你是指参数的个数可以变化? 比如文件操作函数fpritnf,它的参数是不确定的,可以是fprintf("%s%s","你好","他好");也可以是fprintf("%s%d%c","字符串",10086,'c'); 如果自己写一个参数变化的函数的话,呵呵,我没试过。
我们提供的服务有:网站设计制作、网站制作、微信公众号开发、网站优化、网站认证、楚雄州ssl等。为上千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的楚雄州网站制作公司
在C语言中,函数中要用数组做参数,可以采用三种方式,其中后两种均可适用于变长数组参数。
1 直接以定长数组做参数,声明形式为:
ret_type func(int a[100]);
这里就是以100个元素的数组做参数的。
2 声明时不带长度,即:
ret_type func(int a[]);
3 以指针替代数组,即:
ret_type func(int *a);
2,3两种均可以用于变长数组。不过这种情况下,需要与函数约定数组长度的确定方法,比如约定规模 ,约定结束值,增加额外参数传长度,在数组元素中包含长度,或采用全局变量传长度等等。
按照你现在给出的代码,
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);
}
可以试一下是否是你需要的效果。 如果不是 再追问
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流