当有时需要向main函数传递实参,定义:
int main(int argc,char *argv[]) { ... }
第一个形参argc表示数组中字符串的数量,第二个形参argv是一个数组。因为第二个形参是数组,所以main函数也可定义为:
int main(int argc,char **argv) { ... }
其中argv[0]指向程序的名字,并且包含了程序所在的完整路径,接下来的元素依次传递命令行提供的实参。
简单用法示例,新建工程键入代码:
#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");
}
编译运行后输出如下:
传递参数给main函数有两种方法,第一种方式是在编译环境中设置,以VS2017为例,右击项目—>属性—>配置属性—>调试—>命令参数,在命令参数中输入,每个参数之间用空格隔开。
编译运行后输出如下:
第二种方式也是经常会用到的方式是通过命令提示符传入。首先需要打开命令提示符窗口,点击开始菜单在“搜索程序和文件”里输入命令“cmd”或者直接按快捷键 Windows+R,在弹出的对话框里输入“cmd”即可打开命令提示符窗口:
打开命令提示符窗口后需要输入生成的exe文件所在的完整路径,一个简便的方法是把exe文件直接拖入提示符窗口即可,之后输入传入参数,以空格分隔,之后回车,显示如下:
下面演示使用OpenCV显示一幅图片:
#include <iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc,char *argv[])
{
Mat image = imread(argv[1]);
imshow("Lena", image);
waitKey();
}
编译运行后输出如下:
一般编译器默认使用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");
}