1. 程式人生 > >C++ main函式中引數argc和argv含義及用法

C++ main函式中引數argc和argv含義及用法

argc 是 argument count的縮寫,表示傳入main函式的引數個數;

argv 是 argument vector的縮寫,表示傳入main函式的引數序列或指標,並且第一個引數argv[0]一定是程式的名稱,並且包含了程式所在的完整路徑,所以確切的說需要我們輸入的main函式的引數個數應該是argc-1個;

簡單用法示例,新建工程鍵程式碼:

#include <iostream>

using namespace std;

void main(int argc,char *argv[])
{
	for(int i=0;i<argc;i++)
	{
		cout<<"argument["<<i<<"] is: "<<argv[i]<<endl;
	}
	system("pause");
}

argv是指向指標的指標,main函式的第二個引數“char *argv[]“也可以替換為 “char **argv“,兩者是等價的。

在編譯環境下按F5執行,輸出如下:


可見,在沒有引數傳入的情況下,儲存程式名稱的第一個變數argv[0]依然存在。

傳引數給main函式有兩種方法,第一種方式是在編譯環境中設定,以vs2012為例,右擊專案—>屬性—>配置屬性—>除錯—>命令引數,在命令引數中輸入,每個引數之間用空格隔開。


之後點選確定並應用,執行之後顯示如下:


第二種方式也是經常會用到的方式是通過命令提示符傳入。首先需要開啟命令提示符視窗,點選開始選單在“搜尋程式和檔案”裡輸入命令“cmd”或者直接按快捷鍵 Windows+R

,在彈出的對話方塊裡輸入“cmd”即可開啟命令提示符視窗:


開啟命令提示符視窗後需要輸入生成的exe檔案所在的完整路徑,一個簡便的方法是把exe檔案直接拖入提示符視窗即可,之後輸入傳入引數,以空格分隔,之後回車,顯示如下:


如果你堅持要手工輸入完整路徑的話,你會發現等你“Ctrl+C”路徑後,在提示符視窗中按“Ctrl+V”卻不能貼上,這時候可以在視窗中右鍵單擊一下試試,你會發現右鍵選單裡的貼上功能還是有效的

下一個例子演示使用opencv顯示一幅圖片:

#include <iostream>
#include <core/core.hpp>
#include <highgui/highgui.hpp>
using namespace std;
using namespace cv;

void main(int argc,char **argv)
{
	Mat image=imread(argv[1]);
	imshow("Lena",image);
	waitKey();
}
注意讀入的引數是argv[1],在命令提示符視窗執行:

最後說明一下:一般編譯器預設使用argc和argv兩個名稱作為main函式的引數,但這兩個引數如此命名並不是必須的,你可以使用任何符合C++語言命名規範的變數名作為入參,效果是一樣的:

#include <iostream>
#include <core/core.hpp>
#include <highgui/highgui.hpp>
using namespace std;
using namespace cv;

void main(int value,char **point)
{
	for(int i=0;i<value;i++)
	{
		cout<<"argument["<<i<<"] is: "<<point[i]<<endl;
	}
	system("pause");
}