C語言中main函數是程式的入口函數,一般在使用main函數的時候都是不帶參數的,那麼main函數帶上參數又如何呢?
main函數形式:
int main(int argc,char *argv[],char *envp[])
{
program;
}
可知main函數有三個參數:
1,argc:記錄指令行參數的個數(包含第一個參數–可執行檔案名),是一個整型變量;
2,argv:表示指令行的每一個參數的字元指針數組,每一個元素是一個字元指針,指向一個字元串;
3,envp:字元指針數組,每一個元素是指向一個環境變量的字元指針(最後一個元素是NULL)。
main函數不能再程式内部取得實際值,它的參數是從作業系統指令行上擷取的,
指令行的一般形式為”C:>可執行檔案名 參數 參數 參數”。
根據一個執行個體深入認識一下mian函數的參數:使用main函數的參數,實作一個整數電腦
int Add(int x, int y)
{
return x + y;
}
int Sub(int x, int y)
{
return x - y;
}
int Mul(int x, int y)
{
return x * y;
}
int Div(int x, int y)
{
return x / y;
}
int main(int argc,char *argv[])
{
int ret = ;
int ben = ;
int tmp = ;
if (argc != )
{
printf("輸入的參數錯誤\n");
return ;
}
ben = atoi(argv[]);//atoi函數把字元串轉化成一個整數值
tmp = atoi(argv[]);
switch (*(argv[] + ))
{
case 'a':
ret = Add(ben, tmp);
break;
case 's':
ret = Sub(ben, tmp);
break;
case 'm':
ret = Mul(ben, tmp);
break;
case 'd':
ret = Div(ben, tmp);
break;
default :
break;
}
}
argc等于4,argv[]有四個有效參數。
可變參數清單
可變參數清單可以通過宏來實作,定義在stdarg.h頭檔案中。這個頭檔案中聲明了一個類型va_list 和三個宏——va_start, va_arg, va_e。
使用可變參數,實作函數求未知參數部分n個數中的最大值
#include<stdio.h>
#include<stdlib.h>
#include <stdarg.h>
int Max(int n, ...)
{
va_list arg;//聲明arg變量,用于通路參數清單的未确定的部分
int i = ;
int max = ;
va_start(arg, n);//va_start初始化變量arg,把arg變量設定成指向可變參數清單的第一個參數
int m = va_arg(arg, int);//arg傳回參數的值并指向下一個可變參數
for (i = ; i < n; i++)
{
max = ((m)>(va_arg(arg, int)) ? (m) : (va_arg(arg, int)));
}
return max;
va_end(arg);
}
int main()
{
int a = ;
int b = ;
int c = ;
int arg = Max(, a, b, c);
printf("%d\n", arg);
}