[C/C++基础知识] main函数的参数argc和argv

博客链接:https://blog.csdn.net/Eastmount/article/details/20413773

该篇文章主要是关于C++\C语言最基础的main函数的参数知识,是学习C++或C语言都必备的知识点.不知道你是否知道该知识?希望对大家有所帮助.

一.main()函数参数
通常我们在写主函数时都是void main()或int main() {..return 0;},但ANSI-C(美国国家标准协会,C的第一个标准ANSI发布)在C89/C99中main()函数主要形式为:
(1).int main(void)
(2).int main(int argc,char *argv[]) = int main(int argc,char **argv).
其参数argc和argv用于运行时,把命令行参数传入主程序.其中ARG是指arguments,即参数.具体含义如下:
(参照Arguments to main和C++ Primer7.2.6节)
(1).int argc:英文名为arguments count(参数计数)
count of cmd line args,运行程序传送给main函数的命令行参数总个数,包括可执行程序名,其中当argc=1时表示只有一个程序名称,此时存储在argv[0]中.
(2).char **argv:英文名为arguments value/vector(参数值)
pointer to table of cmd line args,字符串数组,用来存放指向字符串参数的指针数组,每个元素指向一个参数,空格分隔参数,其长度为argc.数组下标从0开始,argv[argc]=NULL.
argv[0] 指向程序运行时的全路径名
argv[1] 指向程序在DOS命令中执行程序名后的第一个字符串
argv[2] 指向执行程序名后的第二个字符串
argv[argc] 为NULL.

二.源代码中的argc与argv
由于C程序必须有main()函数为入口,而且它不能被其他函数调用(可以调用自身),因此不能再程序内部取得实际值.那么在何处把实参赋值给main函数的形参呢?这就需要调用"运行"或"DOS提示符",在调用可执行程序exe时,编译器会帮助我们将输入参数的信息放入main函数的参数列表中传参.
1.计算命令行参数个数程序如下:

#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
	printf("参数个数=%d\n",argc);
	system("PAUSE");
	return 0;
}
 
//C++ 输出参数个数
#include <iostream>
using namespace std;
int main(int argc,char *argv[])
{
	cout<<"参数个数="<<argc<<endl;
	system("PAUSE");
	return 0;
}


调用"运行"(快捷键Win+R)或"cmd"输入"G:\test.exe"会输出"参数个数=1",此时存储的就是执行程序名.输入"G:\test.exe 2 hello good"输出"参数个数=4":

[C/C++基础知识] main函数的参数argc和argv


2.查看argv[]二维数组存储具体字符串的代码如下:

 查看argv存储参数值及对应序号

#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
    int i;
    printf("参数个数=%d\n",argc);
    for(i=0; i<argc; i++)
    {
        printf("参数序号=%d ",i);
        printf("参数值=%s\n",argv[i]);
    }
    system("PAUSE");
    return 0;
}
 


"运行"中输入"G:\test.exe 2 hello good",则输出入下图所示:

[C/C++基础知识] main函数的参数argc和argv

其中argv[0]指向字符串可执行程序的名称G盘下的test.exe,通常会位于"项目名称\Debut\xxx.exe"中.后面argv[1..3]单元依次指向程序调用时的参数.

 

上一篇:《jdk8u源码分析》2.JLI_Launch


下一篇:Android 开发佳站3