深入理解及如何使用main函数参数

news2024/9/27 5:50:22

目录

  • 前言:
  • 一、main函数参数
  • 二、main函数参数的意义及如何使用
  • 三、从操作系统层面(指令)理解main函数参数

前言:

在平时编写代码的过程中,我们会经常写main函数,这是一个程序必不可少的,main 函数是一个特殊的函数,它是程序执行的入口点,但我们往往都没有在意或使用main函数的参数,但main函数其实是有自己自带的参数类型的,只是我们一般没有用到

一、main函数参数

main函数中有两个参数(准确来说是三个,不过我们一般不使用(envp环境指针))

int main(int argc,char* argv[]
{
	//函数体
	return 0;
}

argc:

argc(argument count)是一个整数,表示传递给程序的命令行参数的数量

argv:

argv(argument vector)是一个字符指针数组,其中包含了所有命令行参数的字符串

在这里插入图片描述

不过要注意的是一般argv[0]通常是程序的名称,这个字符指针数组从下标1开始使用

二、main函数参数的意义及如何使用

平常我们练习代码时,代码程序写好就可以直接编译运行了,但其实我们是可以通过命令行参数给我们写好的程序传递我们需要传递的参数的

这样即使我们写好了我们的代码,我们也可以在程序的外部对我们的程序进行控制

比如我们写了一个模拟计算器代码,我们可以在这个代码运行前传参进行控制

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(int argc,char* argv [])
{
    int s=0;
    int num1=atoi(argv[2]);
    int num2=atoi(argv[3]);
    if(strcmp(argv[4], "+") == 0)
    {
        s=num1+num2;
        printf("%d\n",s);
    }
    if(strcmp(argv[4], "-") == 0)
    {
       s=num1-num2;
        printf("%d\n",s);
    }
    if(strcmp(argv[4], "*") == 0)
    {
        s=num1*num2;
        printf("%d\n",s);
    }
    if(strcmp(argv[4], "/") == 0)
    {
        s=num1/num2;
        printf("%d\n",s);
    }
    printf("argv[0] = %s\n",argv[0]);
    printf("argv[1] = %s\n",argv[1]);
    printf("argv[2] = %s\n",argv[2]);
    printf("argv[3] = %s\n",argv[3]);
    printf("argv[4] = %s\n",argv[4]);
    printf("计算结束");
    return 0;
}

在命令行传入不同的参数即可控制该程序的执行流程

如:
在这里插入图片描述

  • 因此有了main函数参数,通过命令行参数,用户可以在程序运行时提供特定的输入或选项,从而控制程序的执行流程或行为。
  • 对于需要处理大量数据或执行重复任务的程序,通过命令行参数可以方便地实现批处理。
  • 允许程序适应不同的运行环境或执行不同的任务,而无需修改程序代码。

总之,main 函数的参数提供了一种灵活的方式来控制程序的执行,使程序能够更广泛地适应不同的使用场景和需求。

三、从操作系统层面(指令)理解main函数参数

在我们学习操作系统的一开始,我们会学习许许多多的指令,比如Linux中的ls、Windows中的cmd等等

如果你理解的比较深刻你会知道这些指令在根本上就是一个程序

以Linux中的ls举例,我们知道ls的基本用途是列出目录,但它还有许多的命令选项,比如ls -a/-l/-h,到这里你有没有发现这是不是和我们的main函数参数很像,所以操作系统中的指令及选项也是main函数参数的一种运用,在命令行传递不同的参数在控制不同的选项,从而达到不同的作用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2165556.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信息汇总(避坑)系统

本系统前期设定为公司避坑系统&#xff0c;在此基础上衍生出公司信息汇总功能 主要功能点&#xff1a;避坑分类、标签、随笔记录、阅读人数、评论&#xff08;用户评论、匿名评论&#xff0c;评论回复等&#xff09;、系统留言&#xff08;支持表情留言&#xff09;、避坑信息…

JavaScript中的无穷大

JavaScript中的无穷大 溢出&#xff1a;overflow,数字结果超过JS表示的数字上限&#xff0c;结果为一个特殊的无穷大Infinity或负无穷大-Infinity. 下溢&#xff1a;underflow是当前结果无限接近于0比JS能表示的最小值还要小&#xff0c;将会返回0&#xff0c;负数下溢就是-0…

剑指offer JZ7 重建二叉树

描述&#xff1a; 给定节点数为 n 的二叉树的前序遍历和中序遍历结果&#xff0c;请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}&#xff0c;则重建出如下图所示。 思路&#xff1a; 这道题考察的是二叉树根据先序…

蓝桥杯备赛---引言

我是来自成都锦城学院的2021级学生&#xff0c;第一次参加第十五届蓝桥杯嵌入式赛道获得了国二的名次&#xff0c;接下来将为大家分享各个模块的代码&#xff0c;可以速成省一&#xff0c;但想要取得国一的成绩则需要补偿数据结构、基本c语言函数等相关知识&#xff0c;很遗憾没…

C++ 创建型设计模式

何为设计模式 设计模式是指在软件开发中&#xff0c;经过验证的&#xff0c;用于解决在特定环 境下&#xff0c;重复出现的&#xff0c;特定问题的解决方案&#xff1b; 设计原则 依赖倒置 开放封闭 一个类应该对扩展&#xff08;组合和继承&#xff09;开放&#xff0c;对…

犀牛检测系统源码分享

犀牛检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

N诺计算机考研-错题

B A.LLC,逻辑链路控制子层。一个主机中可能有多个进程在运行,它们可能同时与其他的一些进程(在同一主机或多个主机中)进行通信。因此在一个主机的 LLC子层的一个服务访问点,以便向多个进程提供服务。B.MAC地址,称为物理地址、硬件地址,也称为局域网地址,用来定义网络设…

python与html链接测试

做这个测试我使用了两个资源 1.csdn上收集的参考资料&#xff0c;特此感谢 链接如下&#xff1a;Pycharm社区版创建Flask项目(配置项目文件)_pycharm community flask-CSDN博客 2.kimi 网址如下&#xff1a;Kimi.ai - 帮你看更大的世界 (moonshot.cn) 这是试出来的操作步骤…

python如何查看文件的目录

1、sys.arg[0]: import sys print(sys.argv[0])#当前脚本的位置 输出结果&#xff1a; G:/Pythonxx/test.py 2、os模块 import os print("1111") print (os.getcwd())#获得当前目录 print (os.path.abspath(.))#获得当前工作目录 print (os.path.abspath(..))#获得当…

基于丹摩智算部署可图(Kolors)

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 丹摩智算平台简介一、Kolors 简介介绍技术背景部署与使用前提条件 二、DAMODEL 平台创建适配机器1.1、实例创建 三、服务部署安装 An…

性能测试利器 - Locust框架解析

01 认识Locust 说起性能测试工具&#xff0c;大家肯定想到的都是Jmeter&#xff0c;是的&#xff0c;由于其简单易用、功能强大&#xff0c;已经变成主流的压测工具之一。当需要实现一些高级功能的时候&#xff0c;可以使用Java语言对Jmeter进行扩展。 但是很多小伙伴只会Pyt…

10种数据库技术的发展历程与现状

数据库是互联网的基石&#xff0c;存储着海量信息&#xff0c;使信息可被高效地组织、检索和分享。没有数据库&#xff0c;网站无法记忆用户数据&#xff0c;应用无法提供个性化服务&#xff0c;信息交流将失去智能与连贯性。因此&#xff0c;数据库技术极大地推动了互联网的发…

如何使用 Windows 自带的虚拟机 Hyper-V

当前环境: Windows 10 Pro 开启 Hyper-V 功能 开启 Hyper-V 功能 开始菜单, 搜索 “control” 打开控制面板点击 “程序” > “启用或关闭 Windows 功能”开启所有的 Hyper-V 选项 安装虚拟机 准备系统镜像 .iso 文件 进入 itellyou.cn 进行下载所需镜像我选择的是: Wind…

nginx部署手册

1、在安装nginx前首先要确认系统中安装了gcc、pcre-devel、zlib-devel、openssl-devel yum -y install gcc pcre-devel zlib-devel openssl openssl-devel2、 新建nginx用户 &#xff08;1&#xff09;groupadd 命令用于创建一个新的用户组 groupadd nginx&#xff08;2&#…

鸿蒙开发(NEXT/API 12)【基础功能(EnterpriseAdminExtensionAbility开发指南)】企业设备管理服务

概述 企业设备管理扩展能力&#xff0c;是设备管理应用必备组件。当开发者为企业开发设备管理应用时&#xff0c;需继承EnterpriseAdminExtensionAbility&#xff0c;在EnterpriseAdminExtensionAbility实例中实现MDM业务逻辑&#xff0c;EnterpriseAdminExtensionAbility实现…

Xcode 16 上传AppStore遇到第三方库 bitcode 的问题

Xcode 16 上传AppStore遇到第三方库 bitcode 的问题 最近两天更新了Xcode 16&#xff0c;然后正好要发布新版本的App&#xff0c;打包Adhoc没问题&#xff0c;但是上传AppStoreConnect或者TestFlight就不行解决方案参考资料 最近两天更新了Xcode 16&#xff0c;然后正好要发布新…

【裸机装机系列】15.kali(ubuntu)-重装linux步骤

推荐阅读&#xff1a; 1.kali(ubuntu)-为什么弃用ubuntu&#xff0c;而选择基于debian的kali操作系统 如果你想重装linux系统&#xff0c;因为装机时采用了LVM分区的方式&#xff0c;那就可以按照下面步骤来操作&#xff1a; 保留 /home分区&#xff0c;“/swap”可以不动&am…

修改Opcenter EXFN 页面超时时间(Adjust UI Session Extend Token)

如果你想修改Opcenter EXFN中页面Session的超时时间&#xff0c;你可以按照如下步骤修改SessionAge 这个参数&#xff1a; 管理员运行CMD执行以下命令 umconf -getconfig -file C:\temp\config.json如果第2步有报错&#xff0c;则执行步骤4;如果没有报错则执行第5步如果第2步…

权限维持——Linux

前提 已经提权到管理员权限 一、创建账户 1、创建一个自定义密码的账户 已知&#xff0c;Linux中所有的用户的信息 存储在/etc/passwd这个文件中 。可以利用管理员权限修改这个文件&#xff0c; 添加一个账户 。 利用linux中的密码的编码算法 生成对应密码 &#xff08;不知…