c语言main函数里的参数argv和argc解析

发布时间 - 2025-07-22 00:00:00    点击率:

前言

通常,我们在编写main函数时,习惯于不带参数的写法。然而,标准的main函数应包含两个参数:argc和argv。那么,这两个参数的意义和使用方法是什么呢?本文将为您详细讲解main函数中这两个参数的用法,帮助您理解这种写法的含义。

main函数的返回值及其意义

01 函数为何需要返回值

在设计函数时,参数和返回值是必不可少的部分。参数是函数的输入,而返回值则是函数的输出。由于函数需要向外输出数据(即运行结果),因此需要返回值。函数被调用时,返回值作为函数结果返回给调用者。总之,函数的返回值是为调用者提供一个结果值。

02 main函数的调用者

(1) main函数是一个特殊的函数,名字本身具有特殊性。在C语言中,main函数被指定为程序的入口点。其它函数只有被main函数直接或间接调用时才会执行,如果未被main函数调用,则在整个程序中无用。

(2) 从某种角度来看,main函数代表了当前程序的整体。main函数的开始标志着整个程序的执行开始,而其结束返回则标志着整个程序的结束。

(3) 执行这个程序的实体就是main函数的调用者。

03 Linux下程序执行的本质

(1) 在Linux中,通过命令行输入./xx来执行一个可执行程序。

(2) 我们可以使用shell脚本来调用和执行一个程序(后续将展示一个shell脚本)。

(3) 在程序中也可以通过fork和exec来调用执行一个程序,这在Linux应用编程的文章中有详细介绍,参考《Linux系统下进程编程之exec族函数解析(四)》。

(4) 尽管有多个执行程序的方法,但其本质是相同的。在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函数传递参数,并接收其返回值。

03 main函数为何需要参数

(1) 虽然main函数可以不带参数,即父进程调用子进程并传递参数并非必须。int main(void)这种形式即为不传递参数。

(2) 有时为了增加程序的灵活性,我们希望在执行程序时通过参数来控制程序的运行,达到无需重新编译就能改变程序运行结果的效果。下面以一个简单程序为例,展示这种灵活性:

如果要修改程序内容,必须更改源代码,这种灵活性不够。接下来,我们将通过向main函数传递参数来提高程序的灵活性。

04 如何向main函数传递参数

(1) 通过argc和argv这两个C语言预定义的参数来实现。

(2) argc是一个int类型,表示在运行程序时传递给main函数的参数个数;argv是一个字符串数组,用于存储多个字符串,每个字符串即为传递给main函数的一个参数。argv[0]是第一个参数,argv[1]是第二个参数,以此类推。

运行结果:

然后在执行程序时,可以添加参数:

注意:

(1) main函数的参数都是通过字符串形式传递的。

(2) 程序被调用时,各参数之间用空格分隔。

(3) 在程序内部使用argv时,最好先检查argc的值。

总结

今天的分享就到这里,关于shell脚本的教程,未来将会有专门的系列文章进行详细讲解。


# linux  # c语言  # ai  # shell脚本  # 字符串数组  # 字符串  # int  # void  # 值传递  # 返回值  # 是一个  # 命令行  # 这两个  # 多个  # 调用者  # 不带  # 标志着  # 即为  # 都是 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  如何在腾讯云服务器快速搭建个人网站?  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  Laravel如何与Inertia.js和Vue/React构建现代单页应用  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  Laravel如何发送系统通知?(Notification渠道示例)  Laravel中的withCount方法怎么高效统计关联模型数量  LinuxCD持续部署教程_自动发布与回滚机制  如何自定义建站之星模板颜色并下载新样式?  Python文件异常处理策略_健壮性说明【指导】  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  Laravel如何与Pusher实现实时通信?(WebSocket示例)  香港服务器租用每月最低只需15元?  在Oracle关闭情况下如何修改spfile的参数  JavaScript如何实现路由_前端路由原理是什么  高性能网站服务器配置指南:安全稳定与高效建站核心方案  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  如何快速搭建虚拟主机网站?新手必看指南  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  如何在阿里云服务器自主搭建网站?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  Laravel如何处理异常和错误?(Handler示例)  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  Android okhttputils现在进度显示实例代码  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  香港网站服务器数量如何影响SEO优化效果?  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  Laravel如何使用withoutEvents方法临时禁用模型事件  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  黑客如何利用漏洞与弱口令入侵网站服务器?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  如何有效防御Web建站篡改攻击?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  Laravel如何优化应用性能?(缓存和优化命令)  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  如何用AI帮你把自己的生活经历写成一个有趣的故事?  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  Android Socket接口实现即时通讯实例代码