Deprecated: Function create_function() is deprecated in /home/www/webroot/loveyu.org/wp-content/plugins/codecolorer/lib/geshi.php on line 4698

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宏定义的参数中的变量为权引用的地址的话就会出错,所以这点需要注意,如果实在只有一个实际参数就老实用指针传递吧!
  原因就不解释了,很简单!


Deprecated: implode(): Passing glue string after array is deprecated. Swap the parameters in /home/www/webroot/loveyu.org/wp-content/themes/twoheart/inc/functions_call.php on line 367

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

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

写下你最简单的想法