va_start va_end的用法

来源:百度知道 编辑:UC知道 时间:2024/05/10 10:41:55
关于va_start va_end va_list va_arg的用法,在一家公司做了下面一道题,刚开始看不懂是什么东东,回来网上看了下才弄懂了点。但下面代码的打印结果还是疑惑。为什么不是6呢?
int ripple(int n,...)
{
int i,j,k;
va_list p;
k=0;j=1;
va_start(p,n);
for(;j<n;++j){ //这里循环两轮对吧,j=1和2。
i=va_arg(p,int); //这里通过指针最先是取得n=3对吧,然后才是取得20。
for(;i;i&=i-1);//那这里j=1(即n=3)时,运行3次循环;j=2(即=20)时又3次循环。
++k; //那这个K应该增到6才对啊,因为上面两个3次循环就总共6次了?
}
va_end(p);
return k;
}
int num=ripple(3,20,11),请问num=? 答案是2

大哥,你审题不仔细,被骗了~~~~~

for(;i;i&=i-1);//注意:这个语句后面有一个;,也就是说是个闭循环
所以++k也就是在for(;j<n;++j)每完成一个循环后加1,

for(;j<n;++j){ //这里循环两轮对吧,j=1和2。
你自己都算出来,这个循环循环两次,所以k最后为2