1. 程式人生 > >深度解析main函式引數

深度解析main函式引數

通常,我們所見到的main函式基本是下面這種形式:

int main( )
{
        program-statements;
}

其實,mian函式是有引數的。本文將圍繞main函式的引數展開詳細的敘述,下面是main函式引數的原型:

int main( int argc, char *argv[ ], char *envp[ ] )
{
     program-statements;
}

這裡的三個引數分別是: 第一個引數:argc是個整型變數,表示命令列引數的個數(包含第一個引數); 第二個引數:argv是個字元指標的陣列,每個元素是一個字元指標,指向一個字串。這些字串就是命令列中的每一個引數(字串); 第三個引數:envp是字元指標的陣列,陣列的每一個元素時一個指向一個環境變數(字串)的指標。

首先敘述第一個引數argc和第二個引數argv。假設我寫了如下的程式碼:

#include <stdio.h>
int main(int argc, char* argv[], char* envp[])
{
	int i = 0;
	for (i = 0; i < argc; i++)
	{
		printf("%s\n", argv[i]);
	}
	system("pause");
	return 0;
}

在執行這個可執行程式之前,我加入了auo,aduo1和aduo2三個引數,如圖: 在這裡插入圖片描述 執行結果如下: 在這裡插入圖片描述

結合程式碼可以這樣解釋它們(argc控制argv): 在這裡插入圖片描述 對於第三個引數envp的解釋,我首先敘寫了以下程式碼:

#include <stdio.h>
int main(int argc, char* argv[], char* envp[])
{
      int i = 0;
      while(envp[i] != NULL)
      {
         printf("%s\n", envp[i]);
         i++;
      }
      return 0;
}

執行結果如圖: 在這裡插入圖片描述 列印結果都為環境變數,所以對於envp的作用可解釋為維護環境變數。