学习“int main(int argc, char *argv[])”记

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

从结果可以看出来,系统将程序文件的路径也作为一个值赋予了主函数。

代码原理暂略

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据