zoukankan      html  css  js  c++  java
  • 可变参数的使用(C++和C#实现)

    //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();
        }
    }

  • 相关阅读:
    veil-evasion免杀处理
    对程序"加料"
    堆栈溢出
    ICMP隧道 ptunnle
    socat流量操控
    DNS隧道 iodns
    dns隧道 dns2tcpd
    ssh X协议转发
    ssh动态端口转发
    ssh远程端口转发
  • 原文地址:https://www.cnblogs.com/jiji262/p/620110.html
Copyright © 2011-2022 走看看