C语言中函数main的参数argc和argv是什么

article/2025/10/5 7:54:23

在 Xcode 中新建一个 macOS 平台 Command Line Tool,使用 C 语言,会发现 main 带了两个参数:argcargv。如下:
请添加图片描述
argc被程序唤起的命令行参数的数量,用于统计参数数量。这里会导致你有一个误区,在下面argv[]部分细说。需要注意的是,虽然一些程序支持-abcd这种合在一起的程序,但是 C 会将其认为是一个,需要手动去改。

argv这里需要细致说一下,之前写的太简洁了,评论有人没看懂,有一些底层逻辑需要说明一下。

之前写的版本为:

argv是一个指向一个字符串数组的指针,数组包含了参数,每个字符串就是一个参数,最后一个元素为0。不过一般习惯使用多级指针来操作字符串。

现在看来确实太简洁了,而且很多人对于数组和指针搞不太清楚,下面详细解释一下,最后进行反省思考。

char *argv[]表示argv[]是一个存放字符类型元素地址的数组,因为 C 中是有字符串的概念的:将每个字符存放在 char 数组,最后一个元素为\0表示字符串的结束。printf(%s)就是输出字符串。并且一般使用argv指针来访问、处理argv[]数组的内容。
C语言中,数组就是一个指针加偏移量。所以argv则是指向一个指针数组argv[]的指针,不用定义,直接可以用。
argv[]数组中存放的的指针指向输入命令的各部分(调用程序、选项、参数)。Shell 中输入的命令通过判断空格进行分割,然后将字符串的头地址放入argv[]数组中,最后放入一个0,表示空指针。
比如说如果 Shell 输入为echo hello, world!,那么argv[]数组存放的指针有 4 个:

  1. 值为echo\0头地址的指针;
  2. 值为hello,\0头地址的指针;
  3. 值为world!\0头地址的指针;
  4. 空指针0

像这条调用程序后面直接就是参数的很容易判断,直接数组第二个开始即可。
但是很多程序是要判断情况的,也就是选项,开发者应该怎么判断选项和参数呢?
一般习惯使用多级指针来操作字符串。前辈们很聪明,利用这点发明了“UNIX 风格”的命令,比如说ls -s .这种命令,选项前面加一个横杠-,这样就可以区分开二者了。
按照 UNIX 的代码惯例,上来直接跳过第一个,然后判断指针指向的字符串第一个字符是不是-,如果是的,那么进入一个switch判断,用case列出多种支持的情况下,应该执行什么代码。例如下面这样就可以判断选项和处理参数:

int c;
while (--argc > 0 && (*++argv)[0] == '-' {while (c = *++argv[0] {switch(c){case 'x':...break;case 'n':...break;default:printf("xxx: illegal opyion %c\n", c);...break;}}
}

最后逐句思考一下自己之前的版本为什么会有人看不懂。原文截图如下:
请添加图片描述
argv是一个指向一个字符串数组的指针,数组包含了参数”:“argv”这种对于很多人来说就是数组本身。但是一般情况下,如果单独说“argv”,指的是数组的指针。如果指的是数组,需要用“数组 argv”、“argv 数组”、“argv[]”来表示。因为前面说到过,数组就是利用指针实现的。而且原文我加了代码样式,如果在代码中,argv就直接表示为指针。并且一般代码中,数组是直接通过指针来使用的。但是在我也问了一下我朋友之后,才知道很多人不清楚这点,以后还是要详细说明一下这种东西。
“每个字符串就是一个参数,最后一个元素为0”: 这句话的问题在于有一点歧义,加上省略了太多东西(看上面的解释也看得出来)。我的意思“程序运行时,会自动将从输入的获取的字符串分割成多个字符串,然后将这些字符串存放在 argv 数组,数组中最后一个元素被存放为空指针0”。导致歧义的原因是使用了从句。在中文中使用从句确实会导致这个问题,以后注意。
“不过一般习惯使用多级指针来操作字符串”: 这个属于我只当笔记记了,这个如果没有看过一些源码的人根本看不懂在说什么东西,心理估计是“你说这个谁懂啊.mp4”。所以以后还是要详细说明一下,当作记录。不然我现在记得什么情况,过了一两年自己也看不懂了。

希望以后博客当中不要再出这些问题了,对于之前打开这篇博客没得到解决的人说一声抱歉。


http://chatgpt.dhexx.cn/article/CfTsx7nV.shtml

相关文章

李宏毅线性代数笔记6:矩阵的计算

1 矩阵的几个概念 1.1 特殊矩阵 1.1.1 数量矩阵 主对角线上元素是同一个数,其余元素全为0的n级矩阵 1.1.2 对角矩阵(diagonal matrix) 主对角线元素之外全为0的方阵 记作diag{d1,d2,……dn} 1.1.3 基本矩阵 只有一个元素是1&#xff…

二、线性代数

6 特殊类型的矩阵和向量 对角矩阵 对角矩阵(diagonal matrix)只在主对角线上含有非零元素,其他位置都是零。形式上,矩阵 D D D 是对角矩阵,当且仅当对于所有的 i ≠ j , D i , j 0 i\ne j, \ D_{i,j}0 i​j, Di…

边缘计算与雾计算的区别

雾计算是对MEC的扩展,扩展到了终端侧,包括计算、存储、存储、控制功能。区别如下: 1.MEC使用的资源是网络边缘的设备,而雾计算还要使用终端设备。 2.雾计算是使得云到物的计算无缝连续衔接。 3.雾计算为垂直行业和应用除提供电信业…

雾计算、边缘计算区别和联系

01 从计算方式上边来说的话,雾计算的层次性稍微强一点,并且架构方面比较平坦,这样下来的话整个计算的平稳性就比较好一点。 02 对于边缘计算来说的话,边缘计算在进行计算的时候是不会对网络产生依赖的,也就是说边缘计算…

雾计算机和云计算机哪个好,怎么理解云计算和雾计算还有边缘计算

此外,《数据时代 2025》还预测,2025 年数据量产生的大主体将由消费者转移到企业,届时企业产生的数据量将占到数据总量的 60%。企业领导者将可以从这些海量数据信息和其价值中获得新的商业机遇,但同时也需要对收集、使用和存储数据…

雾计算-思科白皮书 原文+翻译 | 带你全面官方解读雾计算

前言 预感近阶段雾计算会被再次炒起,众所周知雾计算的概念是思科提出来的,于是找来思科白皮书,却是英文版,闲来无事借google翻译将PDF翻译并排版,方便更多的人认识原汁原味的雾计算。 雾计算和物联网:将云…

[Spark基础]--雾计算

wiki解释 雾计算(英语:Fog Computing)或雾联网(fog networking,或fogging),是使用最终用户终端设备或连接最终用户设备的边缘设备,以分布式协作架构进行数据存储(相较于将…

AI之边缘计算、雾计算云计算技术分析

边缘计算产生背景: 随着移动智能设备的普及以及5G等无线通信技术的发展,涌现出许多具有低延迟要求的计算密集型应用,如在线沉浸式游戏、增强现实和视频流分析等. 由于传统的云计算无法满足这些应用对低延迟的需求,研究者提出了一种新型的计算模式,称为边缘计算. 边…

第三章-云计算边缘计算雾计算

【前言】随着万物互联时代的到来,网络边缘设备产生的数据量快速增加,带来了更高的数据传输带宽需求。于此同时,新型应用也对数据处理的实时性提出了更高要求,传统云计算模型已经无法有效应对,边缘计算、雾计算应用而生…

云计算、雾计算、边缘计算、移动边缘计算和自动驾驶的关系

什么是云计算呢? 简单来说,云计算就是将很多计算机资源和服务集中起来,人们只要接入互联网,将能很轻易、方便的访问各种基于云的应用信息,省去了安装和维护的繁琐操作。 当然,个人和企业也能使用云计算中心…

【笔记】雾计算中移动应用的优先级约束任务调度

目录 前置 摘要 介绍 模型 应用模型 计算和通信模型 能耗模型 问题定义 NP难 预功率分配算法 能量约束调度 算法1:具有启发式H的能量约束列表调度(ECLS-H) 时间约束调度 算法2:具有启发式H的时间约束列表调度&#…

文章云计算的兄弟,雾计算要来了

转自: http://tech.china.com/news/company/892/20160219/21553952_all.html#page_2 现在正在流行的“云计算”,是把大量数据放到“云”里去计算或存储。这样,就解决了目前电脑或手机存储量不够,或者是运算速度不够快的问题&#…

话题 | 雾计算和边缘计算有什么区别?

原文:http://readwrite.jp/infrastructure/32649/ 随着物联网的发展,经常听到「雾计算」和「边缘计算」这样的单词。 雾计算这个词相对来说是最近出现的一个词。因为和云相比位置上更接近设备,所以表示为雾,它是作为实现IoT的结构…

边缘计算和雾计算什么关系_什么是雾计算?

边缘计算和雾计算什么关系 By now most people are more than familiar with the concept of Cloud Computing, but what about the new concept referred to as Fog Computing? Today’s Q&A post takes a look at this new concept and how it differs from Cloud Compu…

【知识积累】Edge vs Fog Computing 边缘计算和雾计算的基本介绍

前言 边缘计算和雾计算都可以被定义为技术平台,使计算过程更接近数据产生和收集的地方,以下详细解释了这两个概念。 顾名思义,边缘计算发生在应用网络的“边缘”。从拓扑结构上看,“边缘计算机”在网络的端点上(如控…

大话:边缘计算、雾计算、云计算

云计算 一种利用互联网实现随时随地、按需、便捷地使用共享计算设施、存储设备、应用程序等资源的计算模式。 云计算系统由云平台、云存储、云终端、云安全四个基本部分组成,云平台从用户的角度可分为公有云、私有云、混合云等。 通过从提供服务的层次可分为&#x…

边缘计算与雾计算

现在人们常将云计算、边缘计算、雾计算放在一起来讨论,而云计算大家都很熟悉了,但是往往很难搞清楚什么是边缘计算,什么是雾计算,而网络上的文章多为长篇大论,又说不清楚,本文将尽量用浅显明了的方式对其进…

雾计算主要有哪些优点,主要面临哪些挑战?

雾平台由数量庞大的雾节点(即上文中雾使用的硬件设备,以及设备内的管理系统)构成。这些雾节点可以各自散布在不同地理位置,与资源集中的数据中心形成鲜明对比。 根据以上内容,可以总结出雾计算与云计算的不同&#xf…

区分云计算,边缘计算,雾计算

物联网架构 Edge Layer之下应该还有一个:Device Layer 设备层负责物联网设备的传感器采集、监控、数据的实时分析(需要使用其他技术)等信息。 物联网架构中,服务组织是自下向上的,即边缘计算的结果可以提供给雾计算用于…

雾计算

雾计算,也称为雾或雾化的联网. 其目标是改善效率的雾化和减少的数据传送到云端进行处理、分析和存储。这往往改善效率,尽管它也可用于安全和合规原因。 普适计算应用包括雾智能电网,智慧城市,智能楼宇车辆网络,和软件…