//C++ 中的可变参数使用 #include <stdio.h> #include <stdarg.h>
intOpenFileArray(FILE***array,char*mode,char*filename,...) { char*pName=NULL; intnrFiles=0; intarrayIndex=0; if(filename==NULL){ return0; } //在参数表中创建一个索引使用的typedef va_listlistIndex; //在参数表中初始化第一个参数索引的宏 va_start(listIndex,filename);
do{ nrFiles++; //得到参数表中下一参数的宏 pName=va_arg(listIndex,char*); }while(pName!=NULL);
*array=newFILE*[nrFiles+1];
//open files pName=filename; va_start(listIndex,filename); do{ if(!((*array)[arrayIndex++]=fopen(pName,mode))){ (*array)[arrayIndex-1]=NULL; return0; } printf("Had open file : %s\n",pName); pName=va_arg(listIndex,char*); }while(pName!=NULL);//有问题
(*array)[arrayIndex]=NULL;
return1; }
voidmain(void) { FILE**array; intfp=OpenFileArray(&array,"r","1.txt","2.txt","3.txt"); if(fp==1){ printf("\nopen file successfully!\n"); } //close the files inti=0; while(array[i]!=NULL){ fclose(array[i++]); } delete[]array; } //C#中的可变参数使用 //如果不用params 关键字,则参数调用的时候需要使用 new object[] {arg1, arg2} classProgram { publicstaticintSumWithVariableParams(paramsint[]args) { intsum=0; for(inti=0;i<args.Length;i++) { sum+=args[i]; } returnsum; } staticvoidMain(string[]args) { System.Console.WriteLine("sum(1, 2, 3, 4, 5) = "+(SumWithVariableParams(1,2,3,4,5)).ToString()); System.Console.WriteLine("sum(33, 22) = "+(SumWithVariableParams(33,22)).ToString()); System.Console.ReadLine(); } }
|
请发表评论