10_参数数量可变的函数及命令行参数

参数个数可变的函数

l  定义参数个数可变的函数

l     stdarg.h头文件

l     va_list类型

l     va_start(parg,i1);

l     va_arg(parg,int)

一、定义参数可变的函数

  #include<stdarg.h>

 返回类型 函数名(参数类型1 固定参数名1,参数类型2固定参数名2,...);

 例:  int func(int i,int j,int k,...)

      int func(int i,...)

二、获取参数

va_list parg;    //定义parg指针

va_start(parg,i); //初始化parg指针

va_arg(parg,int); //获取参数

三、实例

求和函数:

addnum(1,2,3,4,5,6,0)

addnum(1,2,3,4,5,6,10,0)

addnum(1,2,3,4,5,6,10,3,5,0)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stdarg.h>

int addnum(int i,...)
{
  va_list parg; 
  int num=i;//存放和
  int v=i;
  printf("%d",i);
  va_start(parg,i);
  v=va_arg(parg,int);//取i后边一个参数
  while(v!=0)
  {
      printf("+%d",v);
      num=num+v;
      v=va_arg(parg,int);//
  }
 va_end(parg);
 return num;
}
 
 main(void)
{   
 
 printf("=%d
",addnum(1,2,3,4,5,6,7,8,0));
 
    getchar();
    getchar();
    return 0;
}
View Code
1+2+3+4+5+6+7+8=36
View Code

main函数及命令行参数

l  main函数 

l  int main(int argc,int* argc[])

一、main函数常见的2种形式

   void main(void)

   int main(int argc,int* argc[])

、获取参数

argc表示参数列表内有几个参数

 argv[0] 表示进程完整路径

、获取整型参数

atoi(argv[i]) ;

 

四、#include <Windows.h>

GetCommandLineA

操作系统提供的接口函数

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stdarg.h>
#include <Windows.h> 

 
 int main(int argn,char* argv[])// int a[1]//a[0]
{   
  int i;
  printf("%d 
",argn);
  printf("%s",argv[0]);

  for (i=1;i<argn;i++)
  {
      printf("
 %d",atoi(argv[i]));
  }

  printf("
 %s",GetCommandLineA());
    getchar();
    getchar();
    return 0;
}
View Code
1
d:documentsvisual studio 2010ProjectsSolution1Debuglianxiccc.exe
 "d:documentsvisual studio 2010ProjectsSolution1Debuglianxiccc.exe"
View Code

在xx.exe中添加参数:  点击快捷方式 -> 属性->目标->在目标路径后面添加参数,用空格隔开 

原文地址:https://www.cnblogs.com/sd-xyy/p/12913543.html