天天看點

c中main()函數的解析

int main(int argc, char *argv[ ], char *envp[ ] )

{

program-statements

}

有三個參數

第一個參數:argc是個整型變量,表示指令行參數的個數(含第一個參數)。

第二個參數:argv是個字元指針的數組,每個元素是一個字元指針,指向一個字

符串。這些字元串就是指令行中的每一個參數(字元串)。

第三個參數:envp是字元指針的數組,數組的每一個原元素是一個指向一個環境

變量(字元串)的字元指針。主要用來存放環境變量

舉一個簡單的例子

#include<stdio.h>

intmain(intargc, char* argv[], char* envp[])

{

   int i = 0;

   for(i=0; i<argc; i++)

      {

          printf("%s\n", argv[i]);

      } 

    return 0;

}

在項目-屬性-調試-指令行參數中輸入 hello Word 就會出現下面結果

c中main()函數的解析

其中argc代表個數

argv[]數組中有四個,其中

argv[0]代表:練習.exe

argv[1]代表:hello

argv[2]代表:word

argv[3]代表:NULL空指針

而envp執行下面程式

#include <stdio.h>

#include<windows.h>

int main(int argc, char* argv[], char* envp[])

{

int i = 0;

while(envp[i] != NULL)

{

printf("%s\n", envp[i]);

i++;

}

system("pause");

return 0;

}

c中main()函數的解析

都是環境變量,而且是以NULL結尾。

舉一個例子使用main函數的參數,實作一個整數電腦,程式可以接受三個參數,第一個參數“-a”選項執行加法,“-s”選項執行減法,“-m”選項執行乘法,“-d”選項執行除法,後面兩個參數為操作數。 

例如:指令行參數輸入:test.exe -a 1 2 執行1+2輸出3

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<string.h>

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 x = atoi(argv[2]); //字元串轉換整形函數
	int y = atoi(argv[3]);
	int ret = 0;
	if(argc != 4)
	{
		printf("輸入參數有誤\n");
		return -1;
	}
	switch(*(argv[1]+1))
	{
	    case 'a':
		ret = Add(x,y);
		break;
		case 's':
		ret = Sub(x,y);
		break;
		case 'm':
		ret = Mul(x,y);
		break;
		case 'd':
		ret = Div(x,y);
		break;
		default:printf("運算符輸入錯誤\n");
	
	}
	/*if(strcmp("-a",argv[1]) == 0)
	{
		ret = Add(x,y);
	}
	else if(strcmp("-d",argv[1]) == 0)
	{
		ret = Div(x,y);
	}
	else if(strcmp("-m",argv[1]) == 0)
	{
		ret = Mul(x,y);
	}
	else if(strcmp("-s",argv[1]) == 0)
	{
		ret = Sub(x,y);
	}*/
	printf("%d\n",ret);
	system("pause");
	return 0;
           

switch語句中可以更好地調用加減乘除函數,

而if語句中用strcmp函數比較,然後直接傳回所要計算得值。*(argv[1]+1)指向你所要計算的運算。