main函数参数
通常,定义main函数形参列表都是空的,遇到有参数的main函数到不知道怎么理解了。
给main函数传递实参,常见的情况是传递命令参数。
int main(int argc, char *argv[]){......}
第二个形参argv是一个数组,它的元素是指向C风格字符串的指针;第二个参数argc是数组argv中字符串的数量。
因为第二个参数是数组,所以main函数也可以定义为:
int main(int argc,char **argv){......}
其中argv指向char*。
当实参传给main函数之后,argv的第一个元素指向程序的名字或者一个空字符串。
下面我分别从Visual Studio 2015的命令参数和Windows的cmd控制台进行mian函数的实参传递。
具体测试代码如下:
#include <iostream>int main(int argc, char **argv)
{while (argc-- > 0){//printf("argv[%d]:%sn", argc, argv[argc]);printf("argc:%d,*argv++:%sn", argc,*argv++);//printf("argc:%d,*++argv:%sn", *++argv);}
}
Visual Studio 2015的命令参数
命令行参数是"你 我 他",以空格为分割符。输出结果如上图所示,argc等于3,argv的第一个元素指向程序的名字。
Windows的cmd控制台
1、cmd执行.exe可执行文件
在此程序的可执行文件目录下打开cmd:
目录:
1、按住Shift键,鼠标右键快捷方式,先打开Powershell窗口。
2、输入 start cmd 回车
3、这样就可以打开cmd窗口了,并且cmd的工作目录就是当前的目录。
命令行语句:
Projectplay.exe 你 我 他
Projectplay 你 我 他
2、写批量运行脚本.bat文件运行可执行文件
批量运行文件,文件名为:main测试.bat
文件内容为:
在cmd运行.bat文件
或者直接双击.bat文件运行
好像识别汉字出现了问题,这里只是测试,能达到示意main函数的传参即可,我就不深究原因了。
如果把汉字改为数字和字母,则运行效果如预期:
最后:不用指针显示,用数组显示:
#include <iostream>int main(int argc, char **argv)
{while (argc-- > 0){printf("argv[%d]:%sn", argc, argv[argc]);//printf("argc:%d,*argv++:%sn", argc,*argv++);//printf("argc:%d,*++argv:%sn", *++argv);}
}
注意:
因为用指针,指针是随着使用而发生变动的,所以用的时候要十分注意哦!
指针变动后,在用数组的格式输出时,相当于数组名已经发生变化了,所以argv[]就一直输出“他”,而没有像上图的数组调用的依次输出“你 我 他”。