C++中变参的“传引用”问题

  别的不解释,使用变长参数过程中的问题看程序运行结果就明白了!

#include<stdio.h>
#include<stdarg.h>//变参函数va_start,va_arg,va_end
void t(int &a, int b,...){
    int i,d;
    va_list ap;
    va_start(ap,b);
    for(i=0;i<b;i++){
        d=va_arg(ap,int);
        printf("%d ",d);
    }
    printf("\n");
}
void t2(int a,int &b,...){
    int i,d;
    va_list ap;
    va_start(ap,b);
    for(i=0;i<b;i++){
        d=va_arg(ap,int);
        printf("%d ",d);
    }
    printf("\n");
}
int main(void){
    int a=2,b=2;
    t(a,b,4,5);
    t2(a,b,4,5);
    getchar();
    return 0;
}

变参运行结果
  运行之后问题就变得非常显而易见了,如果va_start宏定义的参数中的变量为权引用的地址的话就会出错,所以这点需要注意,如果实在只有一个实际参数就老实用指针传递吧!
  原因就不解释了,很简单!

8条评论在“C++中变参的“传引用”问题”

  1. 最近空间快到期,也想换个空间,请问博主这个wordpress的博客主机空间,包年多少,在国内速度如何、

回复 宁波肛肠医院   取消