opencv3编程入门——学习笔记(1)argc与argv

        以前“看”了很多C++方面的书,基本上都是从入门到放弃。感觉C++的学习太零碎化,不太容易上手。最近导师的项目需要,也是以后开题的需要吧,所以要真的下工夫啃一下cpencv的一些东西了,那C++的一些问题就又会一个个的出现。没办法学习嘛,没人时生下来就会编程的,加油学了。

        言归正传,在一些opencv或者c++的教材或者参考书中经常会见到这样的代码: 

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

        尤其是在经典的《学习OpenCV》这本书里,上来第一个代码就有点让人迷糊。在看了《opencv3编程入门》这本书(第二章)后就解答了我曾经的这个疑惑。在这里记录,也算是分享一下。

         带参数的main函数(比如官方示例程序中就有很多这样的写法),里面有两个形参,而且有时候函数体里面也需要用得到这两个。参数变量。其实根据浅墨大神的说法带形参的main函数,如:main (int argc, char** argv, char** env)是UNIX、Linux以及Mac OS操作系统中C/C++的标准写法(血统最纯正的main函数写法)。可能由于外国砖家更习惯使用UNIX这样的系统,所以在接触主要是由他们开发和维护的OpenCV这样的开源视觉库的时候自然就会发现代码里有这样带着参数的main。这是指一个简答介绍。那么具体这几个参数到底是干什么的?

        首先解答一下前两个。在前两个中arg 就是英语参数(argument)的缩写,然后“c”是counter的缩写;“v”是vector的缩写。那么简单地说argc为整数,用来统计运行程序时送给main函数的命令行参数的个数;而* argv[ ],为字符串数组用来存放指向字符串参数的指针数组。(再说得通俗点,这个变量里存的元素是一个个的指针,也就是地址。这些指针指向的又是每一个的参数。

        · argv[0]指向的是程序运行的全路径名;

        · argv[1]指向在DOS命令中执行程序名后的第一个字符串;

        · argv[2]指向在DOS命令中执行程序名后的第二个字符串;

        · argv[3]指向在DOS命令中执行程序名后的第三个字符串;

        ......

        · argv[argc]为NULL;

        最后一个参数用来表示环境变量ENVVAR,OpenCV很少用。暂时不考虑。

        最后需要指出的是:这些main的参数都是在main函数之前被赋值的。(细思极恐,严格意义上说main函数并不是真正的整个程序入口点函数,这有点颠覆以前的印象。)那么如果这些参数是在执行主函数之前就已经赋值了,那是怎么赋值的呢?(代码中没有体现。)实际上argv[1]需要在【项目属性】->【配置属性】->【调试】->【命令参数】的值添加。急着带引号“”。如“1.jpg”。否则就会在编译时出现错误。

        为了避免这个编译错误,可以按照上面说的方法,在项目属性页里填上命令参数,除此之外最简单的方法就是将代码里与有关argv和argc的代码替换,找到相应的内容换掉。

猜你喜欢

转载自blog.csdn.net/qq_27010559/article/details/80426703
今日推荐