命令行参数argc和argv的解释

article/2025/10/23 13:20:58

今日学习到K&R第5.10节,谈及命令行参数argc和argv,以下是本人的一些见解和思考。

在C语言环境中,main函数的括号里会有两个参数:argc和argv。

例如:

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

第一个参数argc,用于参数计数,其值等于命令行中参数的个数;第二个参数argv,用于参数向量,是一个指向字符串数组的指针。

举个例子:

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

得到输出:

 如果命令行中存在两个参数,其值变化如下:

 可以看到,再上图两例中,第一例只有一个参数,argc = 1, 第二例有三个参数,argc = 3

而argv是一个指向字符串数组的指针,因此 argv[0] = "./a.out" 在例二中 argv[1] = "123", agrv[2] = "456".

行文至此,已经将这两个参数的基本概念已经理通,下一部分讲解argv与*,++,&,[],()等运算符的结合使用。

以命令行 ./a.out 123 456 789 作为例子

前文提到,argv是一个指向字符串数组的指针,最简单的的使用便是:

argv[0] = "./a.out" argv[1] = "123"

*argv指向该字符串数组的第一个字符串,本身是字符数组,因此:

*argv = "./a.out" 

在*argv的基础上结合自增运算符++可以得到 *++argv 和 ++*argv 前者是将argv先指向下一个字符串后再解引用,后者解引用后对字符串向后移位,因此:

*++argv = "123" ++*argv = "/a.out"(注意少了开头的一个'.')

在*++argv的基础上结合 [ ] 运算符有 *++argv[2], 注意到 argv[2] 运算的优先级更高,因此:

*++argv[2] = ‘5’ 

也可以使用 ( ) 来增加算术优先级,因此:

(*++argv)[0] = '1'

在习题实例中还有如下用法:

inc = atoi(&(*++argv)[1]);

思考此处用意:是在 (*++argv)[1] 的基础上又加了取址运算符&,根据上述结论,可得:

(*++argv)[1] = '2'

那么,&(*++argv)[1]便是从2开始的字符串了,因此:

&(*++argv)[1] = “23” atoi(&(*++argv)[1]) = 23


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

相关文章

c++ main中argc和argv解析

目录 一、概述 二、例子 1、代码 2、编译运行 3、参数传递方式1 4、参数传递方式2 一、概述 argc 是 argument count的缩写&#xff0c;表示传入main函数的参数个数&#xff1b;argv 是 argument vector的缩写&#xff0c;表示传入main函数的参数序列或指针&#xff…

c语言argc和argv的作用,c语言中int main(int argc, char argv)中argc和argv的作用

摘要:我们在开发C语言时,经常看到int main(int argc, char *argv[]),但是没有太多的关注于argc和argv这两个参数,其实它们有很多的作用呢。 编写一个计算器 为了简单起见,我在Ubuntu下编写了一个支持个位数“加、减”操作的计算器,我们待会通过这个实例向大家讲解argc和a…

argc 和 argv

argc 是 argument count的缩写&#xff0c;表示传入main函数的参数个数&#xff1b; argv 是 argument vector的缩写&#xff0c;表示传入main函数的参数序列或指针&#xff0c;并且第一个参数argv[0]一定是程序的名称&#xff0c;并且包含了程序所在的完整路径&#xff0c;所以…

php argc argv,argc和argv怎么使用

argc即为argument count的缩写&#xff0c;表示传入main函数的参数个数&#xff1b; argv即为argument vector的缩写&#xff0c;表示传入main函数的参数序列或指针&#xff0c;并且第一个参数argv[0]一定是程序的名称&#xff0c;并且包含了程序所在的完整路径&#xff0c;所以…

c语言argc lt 3,C语言中argc与argv怎么用?为什么我初始化argc时候老是出错??

满意答案 zrc28 2013.07.24 采纳率&#xff1a;59% 等级&#xff1a;12 已帮助&#xff1a;6548人 argc与argv[]是启动C程序时系统传入的&#xff0c;可以直接使用。argc是参数数量&#xff0c;argv是参数表数组。如命令行为“prg.exe 1 2 3”&#xff0c;则argc为4&#xf…

c语言中argc的作用,C语言中main函数的参数argc和argv

参考资料: C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) int main(int argc, char* argv[]) 这两个参数的作用: argc 是指命令行输入参数的个数(以空白符分隔) argv存储了所有的命令行参数 假如你的程序是hello.exe,如果在命令行运…

php args argc,Main函数参数argc,argv说明

Wikipedia&#xff0c;自由的百科全书 C/C语言中的main函数&#xff0c;经常带有参数argc&#xff0c;argv&#xff0c;如下&#xff1a; int main(int argc, char** argv) int main(int argc, char* argv[]) 这两个参数的作用: argc 是指命令行输入参数的个数(以空白符分隔) a…

C和C++中argc和argv的含义以及用法

C和C中argc和argv的含义以及用法 各位小伙伴在接触C和C的时候&#xff0c;总会看到这样的东西 很多伙伴应该都一直注意到了这两个参数&#xff0c;但是很多伙伴编写多年C和C代码&#xff0c;还没有使用过这两个参数。argc和argv这两个参数看起来很复杂&#xff0c;其实一点都…

c++笔记(1):C++中命令行参数argc,argc[ ]究竟是什么

C中命令行参数argc&#xff0c;argc[ ]究竟是什么 1.argc为整数 2.argv为指针的指针&#xff08;可理解为&#xff1a;char **argv or: char *argv[] or: char argv[][] &#xff0c;argv是一个指针数组&#xff09; 注&#xff1a;main()括号内是固定的写法。 3.下面给出一…

关于C++中的argc,argv的使用方法

想必很多人都好奇C中的int argc 和 char **argv 。那我们今天来看看argc,argv的使用方法 1&#xff0c;int argc argc 实际上指命令行接受的参数个数&#xff0c; 比如说&#xff0c;这个程序给的参数是10和21&#xff0c;那么argc的值就是3。为什么是三呢&#xff0c;不是二…

前端面试题整理(一)

1、什么是HTML HTML 指的是超文本标记语言 (Hyper Text Markup Language)&#xff0c;不是一种编程语言&#xff0c;而是一种标记语言&#xff0c;是标准通用标记语言下的一个应用&#xff0c;也是一种规范&#xff0c;一种标准&#xff0c;它通过标记符号来标记要显示的网页中…

《动手学深度学习》—学习笔记

文章目录 深度学习简介起源特点小结 预备知识获取和运行本书的代码pytorch环境安装方式一方式二 数据操作创建运算广播机制索引运算的内存开销NDArray和NumPy相互变换Tensor on GPU&#xff08;PyTorch&#xff09; 自动求梯度MXNetPyTorch 查阅文档 深度学习基础线性回归线性回…

1. Linux系统简介

目录 1.1 操作系统是什么 1.2 Linux是什么,有哪些特点? 1.3 Linux和UNIX的关系及区别 UNIX 的坎坷历史 Linux 的那些往事 UNIX与Linux的亲密关系 UNIX/Linux系统结构 1.4 类UNIX系统是什么鬼? 1.5 Linux中大量使用脚本语言,而不是C语言! C语言并不是最佳选择 脚…

NLP在线医生(一)

1.1 背景介绍 学习目标: 了解智能对话系统的相关背景知识.掌握使用Unit对话API. 什么是智能对话系统&#xff1f; 随着人工智能技术的发展, 聊天机器人, 语音助手等应用在生活中随处可见, 比如百度的小度, 阿里的小蜜, 微软的小冰等等. 其目的在于通过人工智能技术让机器像人类…

计算机网络自顶向下 概念填空整理(完整)

第一章 计算机网络和因特网 1.1 什么是因特网 我们可以从两个角度来回答这个问题&#xff1a;一种是描述组成它的软硬件&#xff1b;另一种是将其视为为分布式应用提供基础服务的联网设施来描述。其实&#xff0c;第一种角度&#xff0c;是从它的组成来描述&#xff0c;第二种…

计算机网络期末复习攻略

计算机网络期末复习攻略 一、名词解释 IP&#xff1a;Internet Protocol 网际互连协议 IPCP&#xff1a;IP Control Protocol IP控制协议 ARP&#xff1a;Address Resolution Protocol 地址解析协议 RARP&#xff1a;Reverse Address Resolution Protocol 逆地址解析协议 …

《计算机网络自顶向下》笔记

【自用】转自&#xff1a;https://blog.csdn.net/qq_39326472/article/details/88089747 目录 第一章 计算机网络和因特网 1.1 什么是因特网 1.1.1 组成描述 1.1.2 服务描述 1.1.3 协议 1.2 网络的边缘 1.2.1 接入网 1.2.2 物理媒体 1.3 网络核心 1.3.1 分组交换 1.3.2 电路交换…

java面试技术栈

java基础 数据结构 排序算法 算法分类 十种常见排序算法可以分为两大类&#xff1a; 比较类排序&#xff1a;通过比较来决定元素间的相对次序&#xff0c;由于其时间复杂度不能突破O(nlogn)&#xff0c;因此也称为非线性时间比较类排序。非比较类排序&#xff1a;不通过比…

深入探索 Android 网络优化(一、网络筑基篇,为什么Flutter能最好地改变移动开发

专用网络 某些部队、组织或者某些人 为了满足特殊业务需求而建立起来的特殊的网络,例如军队、铁路、银行都有自己的专用网络。 二、网络历史演进 1、世界互联网发展历史演进 1)、单个网络 ARPANET,1969年美国国防部创建的一个网络,可以连接周围的计算机。 计算机直接…

637道Java面试题(含答案)

作者&#xff1a;蝉沐风 关注公众号「蝉沐风」&#xff0c;回复「面试题」三个字 &#xff0c;获取更多面试题&#xff0c;这篇文章只是冰山一角 面试题持续整理中&#xff0c;关注「蝉沐风」之后添加个人微信&#xff0c;拉你进技术群&#xff0c;不定期分享好几吨的Java视频教…