C++中main函数的参数

问题

对于一个C/CPP文件来说,一般都有main函数,一个程序的执行一定会是先从main函数这个入口开始,一个最基本的程序框架大概长这样:

#include <stdio.h>
int main()
{return 0;
}

但是,我们有时候看到的main函数这个括号里面还有别的东西,比如:

#include <stdio.h>
int main(int argc, char *argv[])
{return 0;
}

或者

#include <stdio.h>
int main(int argc, char **argv)
{return 0;
}

那么问题来了,这个argcargv有什么用呢,为什么会有这个东西,有没有这个东西貌似对程序的执行并没有什么影响.

问题的探究

首先很容易看出char **argvchar *argv[]是等价的,无非是同一种东西两种写法。

argcint型的,我们可以做一个测试,我们尝试打印一下这个值,看看它是什么?

我们可以测试一下以下程序:

#include <stdio.h>
int main(int argc, char **argv)
{printf("%d\n", argc);return 0;
}

编译:g++ main.cpp -o main,运行./main,然后做一个测试,如图:

从图中一共进行了三次测试:

  • 第一次:输入./main,然后程序运行结果是1
  • 第二次:输入./main 1 2,程序执行结果是3
  • 第三次:输入./main 1 2 3 4 5 6,程序执行结果是7

答案已经很明显了,argc获取到了这个可执行程序一共接受到了多少个参数,第一个只有./main这一个参数,后面的./main 1 2 3 4 5 6一共有7个。

那么还有第二个问题,char **argv这个里面是什么,我们继续探究,写一个程序把这里面的东西打印出来:

#include <stdio.h>
int main(int argc, char **argv)
{printf("argc = %d\n", argc);for (int i = 0; i < argc; i++)printf("%s\n", argv[i]);return 0;
}

然后进行测试:

我们可以看出,argv实际上保存的就是我们输入进去的参数,它保存在了一个字符串里。

总结

因为有了这两个参数,所以我们平时用的很多命令行的工具都是通过这两个参数的传值来知道你的意图。

如果不需要进行命令行参数的获取,当然也可以不打int argc, char **argv这一句。

参考资料:

  • What does int argc, char *argv[] mean?(来自 Stack Overflow)

C++中main函数的参数相关推荐

  1. C 中 main 函数的参数

          看到不同的人写出的 C 或者 C++ 程序时,可能会出现不一样的 main 函数的定义,下面的几种定义方式都是对的: int main(void)int main(int argc)int ...

  2. java中main函数的参数

    java中的main函数是一个程序执行的入口,main函数必须被声明为static的,在编译的时候就已经为其分配了内存,就是说,不用调用也能执行的,那么main函数的参数有什么作用呢?参数args的主 ...

  3. linux中main数据手册,linux中main()函数中参数来源.doc

    linux中main()函数中参数来源 爷而吐裁报讲际芋兽胳缎扒孩员斜阀裔坤且闺获汕秉鳃鞭牲储访电叔麦篷院杰梆滑廊木屹炯历蛋糯诛忙宇倚角缄蔫牲詹狙凄聂脑棵枷团尖枷蝶滞忽唱专迟适苞校驶劫屏列佛束蚂庐悬刽 ...

  4. java用if语句调用方法_J2SE中main函数中的if语句想要调用另一个类的方法怎么能实现?...

    日常生活中,要完成一件复杂的功能,我们总是习惯把"大功能"分解为多个"小功能"以实现.在C++程序的世界里,"功能"可称呼为"函数 ...

  5. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( jni 中 main 函数声明 | 命令行处理 | jni 调用 lib7zr.so 函数库处理压缩文件完整代码 )

    文章目录 一.JNI 中 main 函数声明 二.命令字符串切割并传入 main 函数 三.完整代码示例 1.完整 jni 代码 2.完整 java 代码 3.执行结果 四.参考资料 前置博客 : [ ...

  6. main函数的参数详解,它们是何时何处传入的?(main函数的参数值是从操作系统命令行上获得的)

    一般的main函数都是不带参数的,因此main 后的括号都是空括号.实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数.C语言规定main函数的参数只能有两个, 习惯上这两个参 ...

  7. 【C/C++】main函数之参数argc和argv含义及用法

    初识argc和argv,对其用法甚是困惑,偶得大神"-牧野-"之总结,犹如醍醐灌顶,故转载分享如下,供更多博友学习. argc 是 argument count的缩写,表示传入ma ...

  8. main函数的参数argc和argv

    一.main()函数参数 通常我们在写主函数时都是void main()或int main() {..return 0;},但ANSI-C(美国国家标准协会,C的第一个标准ANSI发布)在C89/C9 ...

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

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

最新文章

  1. 二十万字C/C++、嵌入式软开面试题全集宝典十
  2. python itchat 的使用
  3. kepware怎么读modbus/tcp数据_多机房多活架构,究竟怎么玩?
  4. HDLBits答案(17)_Verilog有限状态机(4)
  5. Moving stones(暴力+思维)
  6. D. Salary Changing(二分,前缀和,贪心,瞎搞)
  7. Windows下 maven3.0.4的安装步骤+maven配置本地仓库
  8. 作者:胡良霖(1973-),男,中国科学院计算机网络信息中心高级工程师
  9. Hadoop怎么了,大数据路在何方?
  10. 你不了解PHP的10件事情!
  11. T-SQL select语句连接两个表
  12. CF #738(div2)B. Mocha and Red and Blue(构造)
  13. 【NodeJS】基础知识
  14. duilib设计器 DuiEditor简易教程 (DuiDesigner) (一)
  15. 关于产品的一些思考——八千里科技之谁叫我起床
  16. C++ 脚本解释器cint
  17. html给页面加背景特效怎么加,给网页加上js特效
  18. [1061]青蛙的约会
  19. 阿里云-内容安全-接口demo
  20. 虚拟信用卡最大的发行商有哪些?

热门文章

  1. 【Web安全笔记】之【4.0 常见漏洞攻防】
  2. 2019年末回顾——一个不过平安夜的程序猿
  3. 几个博弈小题总结 脑子是个好玩意,我也想有一个。
  4. 雷军:中国的乔布斯?!--没人看我来转,疑似水文,太晚了,稍侯拍砖
  5. SQLyog学习笔记01---安装及基本使用
  6. 配置Hystrix Dashboard 时遇到的Unable to connect to Command Metric Stream.问题
  7. SOCKS5代理服务--Linux-CentOS7 配置搭建
  8. 用批判性思维去看问题
  9. 阿里云视频点播实例旧版
  10. 交换机vlan配置实训心得_交换机 VLAN 基础实验报告