C++:Main函式引數列表及引數型別轉換
阿新 • • 發佈:2019-01-04
有三個問題待解決:
1、C/C++ main函式引數意義
2、怎麼向main函式傳參
3、傳進來的引數型別是什麼?怎麼型別轉換?
下面來分別分析!
首先,看程式碼,然後分析。
其中,typeid(argv[0]).name()是獲取資料物件的型別函式。int main(int argc, char* argv[]) { cout << typeid(argv[0]).name()<<" "<<argv[0]<<endl; cout << typeid(argv[1]).name() << " " << argv[1] << endl; cout << typeid(argv[2]).name() << " " << argv[2] << endl; cout << typeid(argv[3]).name() << " " << argv[3] << endl; return 0; }
1、main函式引數
C/C++語言中的main函式,經常帶有引數argc和argv,表示執行時可以帶上引數,如下:
int main(int argc, char** argv)
int main(int argc, char* argv[])
argc表示的是命令列輸入引數個數(以空白符分隔),char** argv可以看成char* argv[],即一個字串陣列,每個元素對應一個字串,值為字串的首地址。因此**argv就是字串的首字母。
假設程式名叫test.exe, 則預設第一個引數是test.exe。
2、傳參方式
第一種,直接在專案配置裡:專案——屬性——配置屬性——除錯——命令引數,設定命令引數就可以傳入,如傳入如下引數11 11.11 hello:
第二種,通過bat批量處理方式來傳參。考慮這種情形,類似於指令碼的目的,當我們想測試這個工程在不同引數下的執行結果,一般情況下是沒設定一遍引數執行一遍,等執行結束我們再重新設定再執行,這樣一遍又一遍,很耗費勞動力,通過設定bat批處理模式,在bat檔案中把我們的輸入引數全寫進去,我們只需要執行該bat檔案即可,簡單有方便!
在工程檔案的debug目錄下,建立一個bat空檔案,編輯輸入引數:
直接雙擊該bat檔案即可執行,輸出結果在三個txt檔案中:
每個txt檔案的輸出結果如下:
3、引數型別及其轉換
首先,假設設定的命令引數是:11 11.11 hello
執行結果如下:
說明,通過命令列引數傳進來的argv[]是char *型別,即都是字串型別。那麼,型別轉換問題就變成char*型別和其他諸如int, double, float,string型別之間的轉換了。見程式碼:
int main(int argc, char* argv[])
{
//argv引數: 11(int),11.11(float/double),hello(string)
//char* 轉 int
int a = stoi(argv[1]);
//char* 轉 float/double
float b = stof(argv[2]);
double bb = stod(argv[2]);
//char* 轉 string (可以直接轉)
string str = argv[3];
cout << a << endl << b << endl << bb << endl << str << endl;
return 0;
}