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. 6月11号=》121页-125页
  2. python判断文件是否为空文件对象_判断Python对象是不是为文件对象的方法有哪些...
  3. QTextStream 的简单理解
  4. 使用jrtplib打包发送h264数据,关使用vlc|mplayer播放
  5. 从零开始学PowerShell(7)编写一个函数体
  6. python selenium 点击开始按钮,python selenium-点击页面而不使用next按钮
  7. 关于泰勒展开的两点思考
  8. 贵阳学python_python学习类
  9. SpringMVC异常处理器代码示例
  10. CenterNet :Objects as Points 详解
  11. 【天梯选拔月赛】参与者人数(并查集模版题!remember find_father写法!)
  12. java 判断pc还是手机_Java判断验证访问是手机端还是PC电脑端
  13. 十分钟带你解读Effective C++(导读)
  14. search engine “DuckDuckGo”
  15. PhalApi2.x笔记
  16. 网络狂飙(netspeeder) v3.28 游戏版 怎么用
  17. 挪威科技大学计算机硕士,挪威科技大学硕士留学申请条件
  18. Driving E-ink display
  19. 解决问题:UnicodeDecodeError utf-8 codec cant decode byte 0xb5 in position 116:
  20. Web版和客户端哪种SQL工具更好?ChatGPT有话要说

热门文章

  1. 延大西院计算机学院,陕西拟新增72个博士点,西邮延大西工程大登榜,西法大凉凉!...
  2. 智慧城市正在改变我们的生活
  3. 8-OxoG oxidative artifacts (8-oxoguanine)氧化伪影
  4. 前端如何获取http状态码400的返回值
  5. Vue 动画效果 及 Animate的基本使用
  6. idea 的奇葩问题
  7. VMWare虚拟机网络模式:Bridged、NAT、Host-Only
  8. 拉绳位移传感器的抗疲劳测试达到多少?
  9. 443端口被占用的解决方案
  10. 微信是如何飞起来的(延伸阅读:性,微信下的机会?一个超级用户的自白:移动社交那点事类kik手机通信录互动应用前景探讨)