详解main函数参数argc、argv及如何传参
目录
1、main()函数参数
2、main函数如何传参
2.1 环境准备
2.2 通过 Powershell 窗口传参
2.3 通过vs界面传参
3、int main() 和 int main(int argc, char *argv[]) 特点
1、main()函数参数
在C语言中,main函数可以带参数。main函数的原型通常为以下两种形式之一:
1、int main(void)2、int main(int argc, char *argv[])
在我们实际写代码时,大都是使用第一种方式,不给main函数传递参数,即 int main()。而实际上main函数也可以接收参数,并有其固定的格式,即第二种形式。
可以发现main函数接收两个参数,分别是 argc 和 argv[]:
argc表示命令行参数的个数(argument count),包括程序本身。即 argc 的值至少为 1。argv[]是一个指向字符串数组的指针,其中每个元素是一个指向传递给程序的参数的指针(argument vector),这些字符串是命令行参数。
到这里先知道 main 函数参数的形式即可,它第一个参数为 int 类型的变量,第二个参数是一个char* 类型的指针数组,关于char* argv[ ] 和 (char*)argv[] 的区别在下面文章中有详细讲解。
深入理解c指针(六)-CSDN博客
2、main函数如何传参
2.1 环境准备
为了能详细讲解,从vs新建项目开始。






上述是一个简单的测试代码,在传参后用来打印参数的个数、程序名称、命令行参数。
ps:若不了解指针相关知识请看本人C语言专栏内容,有对指针的详细讲解。

在 Visual Studio 中,Debug 模式和 Release 模式是两种常用的配置选项,它们在编译和运行项目时有一些重要的区别:
-
Debug 模式:
- 在 Debug 模式下编译生成的文件通常包含调试信息,这些信息可以用于调试和跟踪代码执行过程。
- 编译优化等操作会被减少或禁用,使得生成的代码更易于调试。
- 编译时间可能会比较长,但生成的可执行文件体积通常比较大。
- 在 Debug 模式下运行程序时,可以使用调试器进行逐行调试、查看变量的值、设置断点等操作。
-
Release 模式:
- 在 Release 模式下编译生成的文件通常会进行优化,以提高程序的性能和减小体积。
- 调试信息通常会被剔除,使得生成的可执行文件更加精简。
- 生成的代码经过优化,执行速度可能会更快。
- 编译时间相对较短,生成的可执行文件体积通常比较小。
总的来说,Debug 模式用于开发阶段,便于调试和追踪问题;而 Release 模式用于发布产品版本,以提高性能和减小文件体积。在开发过程中,通常会在 Debug 模式下进行开发和调试,然后在发布时切换到 Release 模式进行编译和部署。
2.2 通过 Powershell 窗口传参
通过2.1部分的环境准备,在选择Debug模式并F5调试代码后,会在创建项目的位置生成Debug文件,打开 Debug 文件里面会自动生成一个可执行程序。
什么是可执行程序?可执行程序是一种计算机文件,其中包含了计算机能够直接执行的指令。在Windows系统中,可执行程序的文件扩展名通常是.exe。在类Unix系统中,可执行程序通常没有特定的文件扩展名,但可以通过文件权限和文件头部信息来指示其可执行性。

在Debug文件夹所在位置按住 Shift 键同时右击鼠标(Shift + 鼠标右键),在弹出的选项栏中选择 “ 在此处打开Powershell窗口 ”,如下图所示。

当使用第二种形式的main函数时,int main(int argc, char *argv[ ]),记住以下几点:
(1)argc 代表命令行参数的个数,是一个整数值,虽然它也是一个参数,但不用去单独输入,在 给 argv[ ]传参后,系统会根据空格自动记录共有多少参数,并赋值给 argc。
(2)argc 至少为1,因为第一个参数永远是程序的名称(即执行程序的文件名)所以,当没有额 外的命令行参数传入时,argc的值为1。
(3)argv是一个指向字符串数组的指针,每个元素都是一个指向传递给程序的参数的指针。这些 参数以空格作为分隔符,在命令行中按顺序输入。
如何理解char* argv[ ]?
这是一个指针数组,说明这个数组的每个元素都是一个指针,而根据上面第三点,输入的每个参数都可以理解为是一个独立的字符串,并以空格分隔。故 argc[ ]中的每个指针都指向参数里对应的字符串。
如果你运行程序时输入命令 .\program.exe arg1 arg2,那么argc的值将为3,argv数组包含以下内容:
argv[0]:指向程序名称./program的字符串指针argv[1]:指向arg1的字符串指针argv[2]:指向arg2的字符串指针
以刚刚建立的项目为例:
生成的可执行文件名称为 Project_3_21.exe ,同时我想输入的参数为564、*89!、54a、-/*/。那么在弹出的 Powershell 窗口中输入如下:

注意:
(1)第一个参数可执行程序名称前要加 .\
在 PowerShell 窗口输入可执行程序名称前加 .\ 是为了指定当前目录下的可执行文件。这是因为 PowerShell 默认不会在当前目录下搜索可执行文件,而是在系统 PATH 变量中定义的路径中查找可执行文件。
当你输入一个可执行文件的名称时,PowerShell 会在 PATH 中定义的目录中查找该文件。如果可执行文件位于当前目录(即你当前所在的目录),而当前目录又不在 PATH 中,那么 PowerShell 就无法直接找到该文件,需要显式指定路径。
(2)每输入一个参数都要加一个空格,代表该字符串结束。
(3)输入所有参数后按回车键,参数会传递到main函数同时运行代码,在该Powershell窗口输 出运行结果。

测试代码:
#include<stdio.h>
int main(int argc, char* argv[])
{int i;printf("参数个数:%d\n", argc);// 打印程序的名称(第一个参数)printf("程序名称:%s\n", argv[0]);// 打印命令行参数for (i = 1; i < argc; i++){printf("参数 %d: %s\n", i, argv[i]);}return 0;
}
2.3 通过vs界面传参




保存设置后 ctrl + F5 运行代码, 结果如下:

通过调试可以发现每个指针都指向了对应参数字符串的首地址,且这些参数保存到了一块连续的内存空间。本次只是做个简单的示例,由于以字符数组的形式存储,这样就可以增加程序的灵活性,比如通过参数传入某个文件的路径,这样就可以在代码里直接进行读取等。

3、int main() 和 int main(int argc, char *argv[]) 特点
不给main函数传递参数的优势:
- 简单明了:不带参数的main函数写起来更简单,对于一些小型的程序来说,可能并不需要从外部接收额外的参数。
- 无需处理参数:不带参数的main函数不需要处理命令行传入的参数,省去了解析和验证参数的步骤,减少了程序的复杂性。
给main函数传参的优势:
- 灵活性:通过命令行参数可以向程序传递不同的数据,使得程序可以根据输入的参数执行不同的操作,增加了程序的灵活性和通用性。
- 交互性:可以通过命令行参数与用户进行交互,使得程序可以接收用户输入或配置信息,增强了程序的交互性。
相关文章:
详解main函数参数argc、argv及如何传参
目录 1、main()函数参数 2、main函数如何传参 2.1 环境准备 2.2 通过 Powershell 窗口传参 2.3 通过vs界面传参 3、int main() 和 int main(int argc, char *argv[]) 特点 1、main()函数参数 在C语言中,main函数可以带参数。main函数的原型通常为以下两种形式…...
解释什么是Web组件化开发及其优势
解释什么是Web组件化开发及其优势 Web组件化开发,是一种将Web应用的界面和功能拆分为独立、可复用的组件的开发方法。这种方法的核心思想是将大型、复杂的Web应用拆分为一系列小型、功能单一的组件,每个组件都负责处理特定的业务逻辑或界面表现。通过组…...
那些场景需要额外注意线程安全问题
主要学习那些场景需要额外注意线程安全问题,在这里总结了四中场景。 访问共享变量或资源 第一种场景是访问共享变量或共享资源的时候,典型的场景有访问共享对象的属性,访问static静态变量,访问共享的缓存,等等。因为…...
(C语言)球球大作战
前言: 这款简易版的球球大作战是一款单人游戏,玩家需要控制一个小球在地图上移动,吞噬其他小球来增大自己的体积。本游戏使用C语言和easyx图形库编写,旨在帮助初学者了解游戏开发的基本概念和技巧。 在开始编写代码之前…...
高级数据结构 <AVL树>
本文已收录至《数据结构(C/C语言)》专栏! 作者:ARMCSKGT 目录 前言正文AVL树的性质AVL树的定义AVL树的插入函数左单旋右单旋右左双旋左右双旋 检验AVL树的合法性关于AVL树 最后 前言 前面我们学习了二叉树,普通的二叉树没有任何特殊性质&…...
在springboot中利用Redis实现延迟队列
文章目录 前言一、基本思路二、springboot实现案例三、测试总结 前言 在开发过程中,有很多场景都需要用到延迟队列来解决。目前支持延迟队列的中间件也不少,特别是基于JMS模式下的消息中间件基本上都支持延迟队列。但是有时我们项目规模可能比较小&…...
UpGrow评论:AI能将我的Instagram粉丝数增加10倍吗?
UpGrow Review: Can AI Grow My Instagram Followers 10X? 概述 UpGrow是一款专注于Instagram增长的AI驱动型社交媒体工具。它通过其庞大的300多人的网络,先进的定位功能,实时分析以及卓越的客户服务,帮助用户有机地增长Instagram关注者。…...
申请软著提交的演示视频有什么要求
申请软件著作权时,演示视频是一个重要的材料,主要用于展示软件的功能和操作流程。演示视频的要求可能会根据不同的申请机构和项目有所不同,但一般来说,以下是几个常见的要求: 内容完整性:演示视频需要展示…...
mac【启动elasticsearch报错:can not run elasticsearch as root
mac【启动elasticsearch报错:can not run elasticsearch as root 问题原因 es默认不能用root用户启动,生产环境建议为elasticsearch创建用户。 解决方案 为elaticsearch创建用户并赋予相应权限。 尝试了以下命令创建用户,adduser esh 和u…...
面试算法-65-二叉树的层平均值
题目 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[3.00000,14.50000,11.00000] 解释:第 0 层的…...
Linux: boot: latency启动延迟分析
https://elinux.org/images/6/64/Chris-simmonds-boot-time-elce-2017_0.pdf https://www.hcltech.com/sites/default/files/documents/resources/whitepaper/files/an_insight_to_optimize_embedded_linux_boot_time_performance.pdf 无意看到这个启动延迟分析,虽…...
QT界面制作
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->setWindowFlag(Qt::FramelessWindowHint);//接收动图QMovie *mv new QMovie(":/pictrue/th.gif…...
进阶二叉树
目录 二叉树 二叉搜索树 二叉搜索树的定义 二叉搜索树的操作 哈夫曼树 哈夫曼树的定义 哈夫曼树的构造 哈夫曼树的性质 平衡二叉树 平衡二叉树的定义: 平衡二叉树的插入调整 1.LL插入/LL旋转 2.RR插入/RR旋转 3.LR插入/LR旋转 4.RL插入/RL旋转 二叉树…...
无人机拦截
配置yolo CUDA报错 nvcc fatal : Unsupported gpu architecture compute_30.(1)查看显卡匹配型号:https://blog.csdn.net/u013308762/article/details/121658823 (2)查看显卡:nvidia-smi -a 》NVIDIA GeF…...
CSDN 编辑器设置图片缩放和居中
CSDN 编辑器设置图片缩放和居中 文章目录 CSDN 编辑器设置图片缩放和居中对齐方式比例缩放 对齐方式 Markdown 编辑器插入图片的代码格式为 CSDN 的 Markdown 编辑器中插入图片,默认都是左对齐,需要设置居中对齐的话,…...
有哪些工具可以替代Gitbook?这篇文章告诉你
你是否曾经在搜索在线文档创建和共享工具时,遇到了Gitbook? Gitbook 是一个相当出色的工具,具有强大的编辑和发布功能,但也有其不足之处,如使用起来有一定的技术要求,入门门槛较高等。如果你正在寻找Gitbook的替代品&…...
小迪安全43WEB 攻防-通用漏洞任意文件下载删除重装敏感读取黑白审计
#知识点: 1、文件操作类安全问题 2、文件下载&删除&读取 3、白盒&黑盒&探针分析 #详细点: 文件读取:基本和文件下载利用类似 文件下载:利用下载获取源码或数据库配置文件及系统敏感文件为后续出思路 …...
大模型提示学习样本量有玄机,自适应调节方法好
引言:探索文本分类中的个性化示例数量 在自然语言处理(NLP)领域,预测模型已经从零开始训练演变为使用标记数据对预训练模型进行微调。这种微调的极端形式涉及到上下文学习(In-Context Learning, ICL)&…...
Redis监控工具
Redis 是一种 NoSQL 数据库系统,以其速度、性能和灵活的数据结构而闻名。Redis 在许多领域都表现出色,包括缓存、会话管理、游戏、排行榜、实时分析、地理空间、叫车、聊天/消息、媒体流和发布/订阅应用程序。Redis 数据集完全存储在内存中,这…...
低代码表单设计器为企业数字转型强劲赋能!
想要实现数字化转型,创造流程化办公,让企业在信息高速发展的社会中抢占更多市场份额,进一步提升市场竞争力,就需要借助专业的软件平台提高效率。低代码开发平台拥有易操作、灵活、可视化的发展优势,作为一种新型的应用…...
别再死记硬背了!用Multisim仿真+图解,5分钟搞懂三极管共射放大电路工作原理
用Multisim仿真图解5分钟掌握三极管共射放大电路三极管共射放大电路是电子技术中最基础也最关键的电路之一,但传统教材中复杂的公式推导和静态图解往往让初学者望而生畏。本文将带你用Multisim仿真软件,通过可视化的方式直观理解电路工作原理,…...
深圳实体门店有必要做GEO AI代运营吗
深圳实体门店有必要做GEO AI代运营吗一、开篇引言2026年深圳本地实体商业竞争进入白热化阶段,全城数百万家线下实体门店涵盖本地生活、家装工装、汽车服务、餐饮娱乐、教育培训等全品类,传统线下地推、门店自然客流、传统团购平台引流效果持续下滑&#…...
零基础轻松拿捏!魔珐星云青少年健康运动教学数字人搭建全流程指南
大家好!本次给大家分享一款面向青少年体育教育的AI创意实践项目——青少年健康运动教学智能数字交互系统。本项目聚焦青少年体质健康痛点,围绕体育教学智能化升级需求,打造集健康知识教学、运动动作陪练、健康知识考核、运动能力评测于一体的…...
告别网盘客户端!用Alist+RaiDrive把百度云盘变成电脑本地文件夹(保姆级图文教程)
用AlistRaiDrive实现网盘本地化管理的终极方案 你是否厌倦了电脑上安装多个网盘客户端,不仅占用系统资源,操作还繁琐割裂?每次上传下载文件都要在不同客户端间切换,效率低下。现在,通过Alist和RaiDrive的组合…...
自制射频功率计:基于AD8317芯片,成本43欧元实现1MHz-10GHz测量
1. 项目概述:为什么我要亲手打造一台射频功率计在无人机和模型飞行器的圈子里,尤其是在我们荷兰FMS Spaarnwoude俱乐部,合规飞行是头等大事。我给我的八轴飞行器加装了云台相机和图传系统,工作在5.8GHz频段。根据本地法规…...
告别FTP龟速:用NTFS-3G在CentOS7上直连移动硬盘拷贝200G大文件
告别FTP龟速:用NTFS-3G在CentOS7上直连移动硬盘拷贝200G大文件当面对数百GB的设计素材、日志文件或数据库备份需要迁移时,传统的FTP传输往往会成为效率瓶颈。我曾在一个视频处理项目中,需要将230GB的4K原始素材从移动硬盘导入服务器ÿ…...
如何进行TVA仿真引擎的“光照地狱”训练?
重磅预告:本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容,该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...
37家金融客户紧急启用的DeepSeek扫描辅助加固包(含未公开API调用密钥策略)
更多请点击: https://kaifayun.com 第一章:DeepSeek漏洞扫描辅助的背景与战略价值 近年来,大模型在安全领域的应用正从辅助问答向深度协同防御演进。DeepSeek系列模型凭借其开源、高推理精度及强代码理解能力,成为构建智能化漏洞…...
AI算力要上天?别笑,太空数据中心真能干翻地球电费!
前言你有没有算过,训练一个大模型,相当于烧掉多少吨煤?如今AI狂飙突进,算力需求指数级增长,可地球上的电——不够用了!更别说建个数据中心还得跟地方政府“斗智斗勇”,抢地皮、配储能、扛审批&a…...
基于随机森林的低成本传感器机器学习校准实践指南
1. 项目概述:当低成本传感器遇上机器学习校准在物联网和智能感知系统铺天盖地的今天,低成本传感器几乎无处不在。从监测办公室的空气质量,到追踪城市街道的噪音污染,再到农业大棚里的温湿度控制,这些价格亲民的“小眼睛…...
