C语言之argc、argv与main函数的传参

news2025/1/16 5:48:45

一 :谁给main函数传参

        (1)调用main函数所在的程序的它的父进程给main函数传参,并且接收main函数的返回值

二 :为什么需要给main函数传参

        (1)首先mian函数不传承是可以的,也就是说它的父进程调用子程序并且给子程序传参不是必须的。int main(void) 这种形式就代表程序员不需要给main函数传参

#include <stdio.h>u


int main(void)
{



    printf("boy.\n");            //输出打印一个boy.
    
    return 0;

}

        (2)有时候程序员希望程序有一种灵活性,所以在选择执行程序时通过传参来控制程序中的运行,达到不需要重新编译程序就可以改变程序运行的结果的效果

        

//但是当程序员需要输出girl时就只能去通过修改源码来进行操作
#include <stdio.h>


int main(void)
{



    printf("girl.\n");

    return 0;
}

三 :表面上:给mian函数的传参是怎么实现的?

        (1)给main函数传参通过argc和argv这两个C语言预定的参数来实现

        (2)argc是int类型 ,表示运行程序时给mian函数传递了几个参数

        (3)argv是一个字符串数组,这个数组用来存储多个字符串,每个字符串就是我们给main函数传的一个参数,argv[0]就是程序员给这个main函数的第一个参数,argv[2]就是程序员给这个main函数的第二个参数.....依次类推

         

//实现给main函数进行传参的操作

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

int main(int argc,  char *argv[])
{
    
     int i = 0;

    printf("perameternum : %d\n",argc);   
    for(i=0;i<argc;i++)
        {

            printf(" num %d is :%s\n",i,argv[i]);
        }
    
        

    return 0;

}

     运行流程:首先用gcc编译链接生成可执行程序 -> 然后执行程序进行传参 第一个参数是./a.out,第二个参数是ab,第三个参数是abc、第四个参数是abcd 

        第一行:编译链接生成可执行程序

        第二行:运行可执行程序并进行传参

        第三行:输出打印了运行时main函数传了几个参数的值‘

        第四行:第0个传的参数的字符串

        第五行:第1个传的参数的字符串

        ......

      

        

//然后这里通过给main函数传参来进行不改变源码来实现想要的结果

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

int main(int argc,  char *argv[])
{
    
     int i = 0;

    printf("perameternum : %d\n",argc);   
    for(i=0;i<argc;i++)
        {

            printf(" num %d is :%s\n",i,argv[i]);
        }
    
        if(!strcmp( ((const char *)argv[1]),((const char *)"0")) )
            {
                printf("boy.\n");
            }

        else if(!strcmp(argv[1],"1"))
            {

                printf("girl.\n");
            }

        else
        {

            printf("unkonw !\n");

            
        }
    return 0;

}

         运行步骤:首先使用gcc编译链接生成可执行程序 -> 然后执行程序 进行传参 第0个参数为./a.out 第1个参数为0

        运行结果:由于第1个参数传的为0,所以打印输出的结果为boy.

   

       

        当给main函数第一个传参传参为1时程序运行的结果:输出为girl.

         

        当给main函数第一个参数传参不为0也不为1时:

         

        

        当不给main函数第一个参数传参时:

         

         

四 :实质上:给mian函数的传参是怎么实现的

        (1)其实是程序在被调用时操作系统层面进行的传参,程序员在使用linux系统下进行编程时只需要执行可执行程序并且将要传的参数给出即可,操作系统会帮程序员进行操作,无需程序员手工进行

五:给main函数传参要注意什么

        (1)main函数传参都是通过字符串进行的

        (2)程序被进行调用时传参,各个参数是通过空格进行分隔的

        (3)在程序中使用argv是要先检查argc,一旦不进行检查可能会出现错误

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

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

相关文章

01-Linux网络设置

1、查看及测试网络 查看及测试网络配置是管理Linux网络服务的第一步&#xff0c;其中的大多数命令以普通用户的权限就可以完成操作&#xff0c;但普通用户在执行/sbin目录中的命令时需要指定命令文件的决对路径。 1.1 查看网络接口地址 主机的网卡通常称为网络接口&#xff…

轻松驾驭视频节奏:灵活调整视频播放速度,让视频内容更出彩!

视频已经成为了我们生活中不可或缺的一部分。无论是观看电影、电视剧&#xff0c;还是浏览短视频、直播内容&#xff0c;我们都希望能够根据自己的喜好和需求来调整视频的播放速度&#xff0c;甚至精确控制每一秒的播放内容。那么&#xff0c;如何轻松实现这一愿望呢&#xff1…

torchmetrics,一个无敌的 Python 库!

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个无敌的 Python 库 - torchmetrics。 Github地址&#xff1a;https://github.com/Lightning-AI/torchmetrics 在深度学习和机器学习项目中&#xff0c;模型评估是一个至关重要的环节。为了准确…

Springboot结合redis实现关注推送

关注推送 Feed流的模式 Timeline:不做内容筛选&#xff0c;简单的按照内容发布时间排序。常用于好友与关注。例如朋友圈的时间发布排序。 优点:信息全面&#xff0c;不会有缺失。并且实现也相对简单 缺点:信息噪音较多&#xff0c;用户不一定感兴趣&#xff0c;内容获取效率…

打造精细化运维新玩法(三)

实践SLO&#xff0c;概括下就是在相对标准、统一的框架下指导和推动服务质量的数字化建设&#xff0c;形成对组织有价值的数据资产和流程规范。借用在人工智能和机器学习领域的观点&#xff0c;算法的上限受限于数据质量的好坏&#xff0c;所以从源头上建设高质量的数据非常重要…

【电赛】STM32-PID直流减速电机小车【寻迹+避障+跟随】【更新ing】

一.需求分析 1.主控&#xff1a;STM32C8T6&#xff08;没什么好说的哈哈&#xff09; 2.电机&#xff1a;JAG25-370电机 【问】为什么要用直流减速电机&#xff1f;&#xff1f; PID控制器需要依靠精确的反馈信号来调整其输出&#xff0c;确保电机按照预定的速度和位置运行…

独立游戏之路:Tap篇 -- Unity 集成 TapTap 广告详细步骤

Unity 集成 TapADN 广告详细步骤 前言一、TapTap 广告介绍二、集成 TapTap 广告的步骤2.1 进入广告后台2.2 创建广告计划2.3 选择广告类型三、代码集成3.1 下载SDK3.2 工程配置3.3 源码分享四、常见问题4.1 有展现量没有预估收益 /eCPM 波动大?4.2 新建正式媒体找不到预约游戏…

介绍Linux

目录 1.什么是操作系统 2.现实生活中的操作系统 3.操作系统的发展史 4.操作系统的发展 Linux的不同版本以及应用领域 1.Linux内核及发行版介绍 <1>Linux内核版本 <2>Linux发行版本 2.应用领域 个⼈桌⾯领域的应⽤ 服务器领域 嵌⼊式领域 3.文件和目录 …

HDFS 读写数据流程

优质博文&#xff1a;IT-BLOG-CN 一、HDFS 写数据流程 HDFS 文件写入流程图如下&#xff1a;三个模块&#xff08;客户端、NameNode、DataNode&#xff09; 【1】校验&#xff1a; 客户端通过 DistributedFileSystem 模块向 NameNode 请求上传文件&#xff0c;NameNode 会检…

Vue 面试通杀秘籍

理论篇&#xff1a; 1. 说说对 Vue 渐进式框架的理解&#xff08;腾讯医典&#xff09; a) 渐进式的含义&#xff1a; 主张最少, 没有多做职责之外的事 b) Vue 有些方面是不如 React&#xff0c;不如 Angular.但它是渐进的&#xff0c;没有强主张&#xff0c; 你可以在原有…

Java面向对象-Object类的toString方法、equals方法

Java面向对象-Object类的toString方法、equals方法 一、toString二、equals三、总结 一、toString Object的toString方法。 方法的原理&#xff1a; 现在使用toString方法的时候&#xff0c;打印出来的内容不友好。 现在想要知道对象的信息。 出现的问题&#xff1a;子类Stu…

SAP Build 2 PDF数据提取与决策树(未完成)

0. 安装desktop agent 在后续过程中发现要预先安装desktop agent&#xff0c;否则没法运行自动化流程… 0.1 agent下载 参考官方文档说明 https://help.sap.com/docs/build-process-automation/sap-build-process-automation/create-user-in-rbsc-download-repository?loca…

AI办公自动化:用Kimi批量在Excel文件名中加入日期

工作任务&#xff1a;在一个文件夹中所有的Excel文件后面加上一个日期 在Kimi中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;写一个Python脚本&#xff0c;具体步骤如下&#xff1a; 打开文件夹&#xff1a;F:\AI自媒体内容\AI行业数据分析\投融资 读取里面所…

18.2 HTTP服务器-处理函数、响应404错误

1. 处理函数 处理来自客户端的请求&#xff0c;并回之以特定的响应&#xff0c;这是处理函数的主要任务。在处理函数中&#xff0c;我们通常会完成如下工作&#xff1a; 验证请求路径 http.Request.URL.Pathhttp.NotFound(...) 当请求没有对应的处理函数时&#xff0c;返回4…

机器学习笔记:label smoothing

在传统的分类任务中&#xff0c;我们通常使用硬标签&#xff08;hard labels&#xff09; 即如果一个样本属于某个类别&#xff0c;其对应的标签就是一个全0的向量&#xff0c;除了表示这个类别的位置为1。例如&#xff0c;在一个3类分类任务中&#xff0c;某个样本的标签可能是…

【Vue】购物车案例-构建项目

脚手架新建项目 (注意&#xff1a;勾选vuex) 版本说明&#xff1a; vue2 vue-router3 vuex3 vue3 vue-router4 vuex4/pinia vue create vue-cart-demo需要勾选上vuex&#xff0c;由于这个项目只有一个页面&#xff0c;vuex可勾可不勾 将原本src内容清空&#xff0c;替换成教学…

缓存更新策略中级总结

背景 看到好些人在写更新缓存数据代码时&#xff0c;先删除缓存&#xff0c;然后再更新数据库&#xff0c;而后续的操作会把数据再装载的缓存中。然而&#xff0c;这个是逻辑是错误的。试想&#xff0c;两个并发操作&#xff0c;一个是更新操作&#xff0c;另一个是查询操作…

数据结构(常见的排序算法)

1.插入排序 1.1直接插入排序 在[0 end]区间上有序&#xff0c;然后将&#xff08;end1&#xff09;的数据与前面有序的数据进行比较&#xff0c;将&#xff08;end1&#xff09;的数据插入&#xff0c;这样[0 end1]区间上就是有序的&#xff0c;然后再向后进行比较。 例如&a…

VXLAN技术

VXLAN技术 一、VXLAN简介 1、定义 VXLAN&#xff08;Virtual eXtensible Local Area Network&#xff09;&#xff1a;采用MAC in UDP&#xff08;User Datagram Protocol&#xff09;封装方式&#xff0c;是NVO3&#xff08;Network Virtualization over Layer 3&#xff09…

机器学习算法 —— 贝叶斯分类之模拟离散数据集

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 目录 实战&#xff08;贝叶斯分类&#xff09;莺尾花数据模拟离散数据集库函数导入数据导入和分析模型训练和预测 总结 实战&#xff08;贝叶斯…