前言

一般我们平时写main函数的话,一般都是写不带参数的比较多,而且也习惯了这样写;其实标准的形式写法,main函数是带两个参数的,这两个参数分别是:argc和argv,那么这两个参数是表示什么意思,怎么用呢?今天就给大家分享main函数里面这两个参数的使用,下面看到这样的写法,要明白这样写的意思哦!

main函数返回给谁

01

函数为什么需要返回值

  • 函数在设计的时候设计了参数和返回值,参数是函数的输入,返回值是函数的输出。

  • 因为函数需要对外输出数据(实际上是函数运行的一些结果值),因此需要返回值。

  • 形式上来说,函数被另外一个函数所调用,返回值作为函数式的值返回给调用这个函数的地方。

  • 总的来说,函数的返回值就是给调用的地方返回一个值。

02

main函数被谁调用

(1)main函数是特殊的,首先这个名字是特殊的;因为在c语言里面规定了main函数是整个程序的入口;其它函数只有直接或者间接被main函数所调用才能被执行,如果没用被main函数直接或者间接调用,则这个函数在整个程序中无用。(2)main函数从某种角度来讲,它代表了当前这个程序,或者说是整个程序;main函数的开始意味着整个程序开始执行,main函数的结束返回意味着整个程序的结束。(3)谁执行了这个程序,谁就调用了main函数。

03

Linux下一个程序执行的本质

(1)表面来看,Linux中在命令行中去./xx去执行一个可执行程序。(2)我们可以通过shell脚本来调用执行一个程序(下面会写一个shell脚本)。(3)我们还可以在程序总去调用执行一个程序(fork exec),这个在Linux应用编程里面的文章里面有写过这个,可以参考这篇文章——Linux系统下进程编程之exec族函数解析(四)(4)我们有多种方法来执行一个程序,但是本质上都是相同的。Linux中一个新程序的执行本质上是一个进程的创建、加载、运行、消亡。Linux中执行一个程序其实就是创建一个新进程,然后把这个程序丢进这个进程中去执行,直到结束。新进程是被谁开启?在Linux中进程都是被它的的父进程fork出来的。(5)命令行本身就是一个进程(就是我们平时在Linux下打开一个终端),在命令行下去./xx执行一个程序,其实这个新程序是作为命令行进程的一个子进程去执行的。总之一句来说,一个程序被它的父进程所调用。(6)小结:main 函数返回给调用这个函数的父进程;父进程要这个这个返回值干嘛?父进程调用子进程来执行一个任务,然后子进程执行完后,通过main函数的返回值返回给父进程一个答复,这个答复一般是表示子进程的任务执行结果完成了还是错误的(0表示执行成功,负数时表示执行失败)。

04

实践验证获取main的返回值

(1)用shell脚本执行程序可以获取程序的返回值并且打印出来:

  #include   int main(void){                       return 0;  }

然后我再创建一个shell脚本:

shell脚本里面的内容为:

  #!/bin/sh

 ./a.out echo $?

执行结果为:

说明:Linux  shell中用$?这个符号来存储和表示上一个程序执行结果(这里就是./a.out)。#!/bin/sh这个书写shell脚本的格式。

argc、argv

01

main的书写形式

一般正规main函数的书写形式有三种:

 int main(void)int main(int argc, char **argv)int main(int argc, char *argv[])

02

谁给main函数传参

(1)调用main函数所在的程序的它的父进程给main函数传参,并且接收main的返回值。

03

为什么要给main函数传参

(1)首先,main函数不传参是可以的,也就是说父进程调用子进程并且给子进程传参不是必须的;int main(void)这种形式就是不要传参了。(2)有时候我们希望程序有一种灵活性,所以选择在执行程序时通过传参来控制程序中的运行,达到不需要重新编译程序就可以改变程序运行结果的效果。下面我先一个简单的程序为例来引出这个程序的灵活性:

我们可以看到如果要改程序里面的内容的话,必须得修改源代码才行,这样灵活不是很好。下面就是我们要讲的,给main函数传参,来提高程序的灵活性。

04

给main怎样来传参

(1)给main传参通过argc和argv这两个c语言预订的参数一起实现。(2)argc是int类型的,表示运行程序的时候给main函数传递了几个参数;而argv是一个字符串数组,这个数组用来存储多个字符串,每个字符串就是我们给main函数传的一个参数,argv[0]就是我们给main函数的第一个传参,argv[1]就是传给main的第二个参数,以此类推后面的传参。

运行结果:

然后我在执行程序的时候,可以加参数:

注意:
     (1)main函数传参都是通过字符串传进去。
     (2)程序被调用时传参,各个参数之间是通过空格来间隔的。
     (3)在程序内部如果要使用argv,那么最好先检查一下argc。

总结

今天的分享就到这里结束了,关于shell脚本的教程,后面也会专门写一系列的文章来讲的。


关注公众号,每周分享至少3篇开源技术干货,文章中如有没看懂的地方可以私聊我,我看到了会立马回复你,个人微信号:a18879499804,在看的话,帮忙点个赞,非常感谢!

c语言 方程改main的值_c语言main函数里的参数argv和argc解析相关推荐

  1. c语言 方程改main的值_C语言编程笔记丨编写第一个C语言程序hello world,我教你哇...

    如果用C语言输出:Hello,world!,该如何编写程序? **代码如下:** #include//包含标准库的信息 main()//定义名为main的函数,不接受参数值 {//main函数的语句都 ...

  2. c语言 方程改main的值_C语言和汇编语言是什么?他们之间可以有怎样的合作?为你解析...

    什么是c语言: C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言;尽管C语言提供了许 ...

  3. 机械优化黄金分割法c语言编程,黄金分割法_机械优化设计_C语言程序.doc

    黄金分割法_机械优化设计_C语言程序黄金分割法_机械优化设计_C语言程序 黄金分割法的优化设计 实验报告 学院:机电工程 机制自动化11-03班 学号:541102010326 姓名:刘点点 1,黄金 ...

  4. c语言怎样获得函数内参数的值_C语言可变参数函数的实现原理

    在本人的<C语言可变参数函数的实现方法>一文中,介绍了如何建立自己的可变参数函数. 下面继续介绍可变参数函数的实现原理. 在汇编语言程序设计中,详细介绍了子程序的实现思想: (1)子程序只 ...

  5. c语言贪吃蛇最简单代码_C语言指针,这可能是史上最干最全的讲解啦(附代码)!!!...

    点击上方"大鱼机器人",选择"置顶/星标公众号"福利干货,第一时间送达!指针对于C来说太重要.然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机 ...

  6. c语言exit在哪个头文件_C语言函数执行成功时,返回1和返回0,究竟哪个好?

    基本上,没有人会将大段的C语言代码全部塞入 main() 函数,更好的做法是按照复用率高,耦合性低的原则,尽可能的将代码拆分不同的功能模块,并封装成函数.C语言代码的组合千变万化,因此函数的功能可能会 ...

  7. c语言怎么判断常量合不合法_C语言z简单的入门

    C语言入门 物联网开发入门直播课 - 嵌入式/物联网-C语言编程基础 - 创客学院直播室​www.makeru.com.cn C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全 ...

  8. c语言实现指定路径文件读取_C语言实现文件复制功能(包括文本文件和二进制文件)...

    文件的复制是常用的功能,要求写一段代码,让用户输入要复制的文件以及新建的文件,然后对文件进行复制.能够复制的文件包括文本文件和二进制文件,你可以复制1G的电影,也可以复制1Byte的txt文档.实现文 ...

  9. c语言源码转流程图工具_C语言学习路线 (详细)

    C语言怎么学习,这是很多人留言问的问题,其实这个问题没有正确答案,一千个读者有一千个哈姆雷特,每个人学习方法和学习习惯都不一样,这里我就结合一些人的学习经验和自己的学习经历,给出我认为的比较合理的C语 ...

最新文章

  1. vivado烧写bin文件到flash 中
  2. mvcc原理_MySQL MVCC原理
  3. Java并发包中的几种ExecutorService
  4. Linux常用命令简述--wc
  5. 软件介绍网站:“软矿”x-berry
  6. 2021河南高考成绩查询郸城一高,郸城一高在河南有多牛 2021年高考成绩
  7. Qt的安装和使用中的常见问题(详细版)
  8. mysql check table_mysql check table
  9. 切线理论-支撑位与阻力位
  10. 温度补偿计算公式_管道布置设计原则、基本要求与补偿器的选择
  11. 随笔之生成简单的验证码
  12. 谷歌被曝出滥用苹果后门收集用户数据
  13. 论文阅读:Vision GNN: An Image is Worth Graph of Nodes
  14. DoIP(一)——基础概念
  15. Spring Aop 的配置与运用
  16. 教学演示软件 模型十二 地理学的水循环模型
  17. Mini-USB接口的引脚定义与USB与miniUSB接口区别
  18. 基于数电的交通灯控制器
  19. 46zTree - Metro 风格的左侧菜单
  20. Linux基础知识学习

热门文章

  1. 点讯输入法S60数字键通用版V6.0(官方签名正式版)
  2. 七年程序员生涯,我学到最重要的 6 个教训,别再中招!
  3. 逼自己学python后,我成了同事眼中的大神
  4. java白盒测试面试题_面试之JAVA基础Junit了解
  5. python的基础命令_深度学习中python常用命令
  6. vgh电压高了有什么_一文告诉你电压互感器的作用是什么?
  7. 从一套表达和通路数据学习常见的绘图展示方式和报错处理
  8. ae画面颜色一键选取替换修改插件Composite Brush for Mac 1.5.2
  9. python的魅力在哪_python的优势在哪
  10. P3383 【模板】线性筛素数