详解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 数据集完全存储在内存中,这…...
低代码表单设计器为企业数字转型强劲赋能!
想要实现数字化转型,创造流程化办公,让企业在信息高速发展的社会中抢占更多市场份额,进一步提升市场竞争力,就需要借助专业的软件平台提高效率。低代码开发平台拥有易操作、灵活、可视化的发展优势,作为一种新型的应用…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
