main作为主函数是不能被其它函数调用的,但是cpp手册说main函数是可以带两个“形参”的,
int main(int argc, char *argv[])
- 这两个家伙约定俗成的叫“argc”和“argv”
- argc须定义为整型函数,argv须定义为字符型指针数组
为什么要给主函数定义参数呢?
是的,主函数不能被调用,等于主函数不能从其它子函数获得赋值(函数中的其它形参除外),但是主函数本质是个函数,所以主函数是支持在定义时给形参赋值的,而这个赋值的主体不是子函数而是承载这个程序的操作系统。
操作系统—赋值—>主函数
而有些情况下,在程序开始之前就给定某些参数,这时就需要用到主函数中的形参了。
给主函数中的参数赋值
这里以windows系统的命令行(cmd)为例子。
在命令行中运行程序时输入的值就会由主函数中的argc和argv承载。
/* *学习 int main(int argc, char ** argv) *2016-05-07 */ #include<iostream> //新Cpp头文件iostream区别于iostream.h using namespace std; //使用iostream头文件需要声明一个“叫std的namespace”,其中包含了cpp的变量名 int main(int argc, char ** argv) //这里的两个参数为“主函数形参”用于接受来自操作系统的指令 { int i; for (i=0; i < argc; i++) //控制循环为argc次 cout<<"Argument "<<i<<" is: "<<argv[i]<<endl; //顺序输出argv指针数组所对应的指针的值 while(argc-->1) //控制循环为“总参数个数-1”次,从而略过输出文件路径 cout<<*++argv<<endl; // 先++所以对应的跳过了“argv[0]”处的文件路径 return 0; }
以这段代码为例,命令行输入
D:\example.exe 1 2 3 a b cpp
输出结果为
Argument 0 is: D:\example.exe
Argument 1 is: 1
Argument 2 is: 2
Argument 3 is: 3
Argument 4 is: a
Argument 5 is: b
Argument 6 is: cpp
1
2
3
a
b
cpp
从结果可以看出来,系统将程序文件的路径也作为一个值赋予了主函数。
代码原理暂略
发表回复