1. 程式人生 > >c++ main函式的引數

c++ main函式的引數

C++的main函式可以沒有輸入引數,也可以有輸入引數,而且只能有兩個引數,習慣上coding如下:

int main(int argc, char* argv[]) 或者 int main(int argc, char** argv)

其中,argc = argument count :表示傳入main函式的陣列元素個數,為int型別,而 argv = argument vector :表示傳入main函式的指標陣列,為char**型別。第一個陣列元素argv[0]是程式名稱,並且包含程式所在的完整路徑。argc至少為1,即argv陣列至少包含程式名。

#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
    for(int i=0;i<argc;i++)
        cout<<argv[i]<<endl;
    return 0;
}

一般編譯器預設使用argc和argv兩個名稱作為main函式的引數,但這兩個引數如此命名並不是必須的,你可以使用任何符合C++語言命名規範的變數名,但要保證第一個引數型別為int型,第二個引數為char**型,如下圖所示。

#include <iostream>
using namespace std;
int main(int count, char* input_parameters[])
{
    for(int i=0;i<count;i++)
        cout<<input_parameters[i]<<endl;
    return 0;
}

由於main函式不能被其他函式呼叫,因此不可能在程式內部取得實際值。main函式的引數值是從作業系統命令列上獲取的。在window系統中,假如編譯連結成的可執行檔案為my_project.exe,則在命令提示符(快捷鍵windows+R,輸入cmd)中,鍵入如下命令(可執行檔案 引數 引數 引數 ...):

my_project.exe jisongxie 1996

將會傳遞三個引數給main函式,第一個argv[0]是前面提到的檔名,第二個argv[1]是"jisongxie",第三個argv[2]是“1996”。同理,可以傳入更多的引數。在ubuntu系統中,可以通過終端進行相同的操作。

  傳入的引數陣列型別為char *字串型別,可以通過atoi,atof函式進行型別的轉換。

  1、atoi,即ascii to integer,把字串轉換成int

  2、atof,即ascii to float,把字串轉換成double

  3、atol,即ascii to long int,把字串轉換成long int

  4、atoll,即ascii to long long int,把字串轉換成long long int

  例如上述輸入的1996,可以得到如下:

int year = atoi(argv[2]);  // year = 1996

 因此,通過上述的命令列輸入以及程式裡面的型別轉換,可以通過命令列視窗傳入值(字串和數字)到程式中執行。