main函数的传参与返回

1、谁给main函数传参
(1)调用main函数所在的程序的它的父进程给main函数传参,并且接收main的返回值。
2、为什么需要给main函数传参
(1)首先,main函数不传参是可以的,也就是说父进程调用子程序并且给子程序传参不是必须的。 int main(void)这种形式就表示我们认为不必要给main传参。
(2)有时候我们希望程序有一种灵活性,所以选择在执行程序时通过传参来控制程序中的运行,达到不需要重新编译程序就可以改变程序运行结果的效果。

3、表面上:给main传参是怎样实现的?
(1)给main传参通过argc和argv这两个C语言预订的参数来实现
(2)argc是int类型,表示运行程序的时候给main函数传递了几个参数;argv是一个字符串数组,这个数组用来存储多个字符串,每个字符串就是我们给main函数传的一个参数。argv[0]就是我们给main函数的第一个传参,argv[1]就是传给main的第二个参数····

4、本质上:给main传参是怎样实现的?
(1)上节课讲过,程序调用有各种方法但是本质上都是父进程fork一个子进程,然后字进程和一个程序绑定起来去执行(exec函数族),我们在exec的时候可以给他同时传参。
(2)程序调用时可以被传参(也就是main的传参)是操作系统层面的支持完成的

5、给main传参要注意什么

(1)main函数传参都是通过字符串传进去的。
(2)程序被调用时传参,各个参数之间是通过空格来间隔的。
(3)在程序内部如果要使用argv,那么一定要先检验argc。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc,char * argv[])
{
    int i=0;
    int com1,com2;
    char c;
    for(i=0;i<argc;i++)
    {
        printf("第%d个参数是%s.\n",i,argv[i]);
    }
    if(argc<4)
    {
        printf("传入参数过少\n");
        return -1;
    }
    com1=atoi(argv[1]);
    com2=atoi(argv[3]);
    c=*(*(argv+2)+0);
    switch(c)
    {
    case ‘+‘: printf("%d+%d=%d\n",com1,com2,com1+com2);break;
    case ‘-‘: printf("%d-%d=%d\n",com1,com2,com1-com2);break;
    case ‘^‘: printf("%d*%d=%d\n",com1,com2,com1*com2);break;
    case ‘/‘: printf("%f/%f=%f\n",(float)com1,(float)com2,(float)com1/(float)com2);break;
    case ‘%‘: printf("%d%%%d=%d\n",com1,com2,com1%com2);break;
    }

    return 0;
}

运行:

[email protected]:/mnt/hgfs/linuxGX/c/main_func# ./a.out 1 2 3 4 5
第0个参数是./a.out.
第1个参数是1.
第2个参数是2.
第3个参数是3.
第4个参数是4.
第5个参数是5.
[email protected]:/mnt/hgfs/linuxGX/c/main_func# ./a.out 1 + 3
第0个参数是./a.out.
第1个参数是1.
第2个参数是+.
第3个参数是3.
1+3=4

时间: 2024-11-08 19:17:06

main函数的传参与返回的相关文章

main函数的参数和返回值

echo $? 检测执行是否成功 0为成功 因为main函数中最后是return 0:return 0不能乱写 因为操作系统在判断程序是否执行成功时是检验返回值是否等于0 &&连接符可以连接两条指令,第一条若执行成功则执行第二条

初识python 函数(定义,传参,返回值)

python基础(二): 菜鸟教程基础知识讲解的非常全面,内容选择我认为的重点输出一遍 函数: 定义一个函数: 你可以定义一个由自己想要功能的函数,以下是简单的规则: def fun(arg): pass return arg # 函数调用语法 fun(arg) arg:argument,参数(也叫prarmeter) ,任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数. def:define,定义,创建函数 ,函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()

python语言中函数的传参与基本练习

首先说明一下在编写Python脚本时,如何在里面使用中文 在脚本的开头可以加上如下代码段: # _*_ coding:utf-8 _*_              其效果和#coding=utf-8 是一样的 下面总结一下在学习Python定义函数时如何传参的问题: 1.首先是位置传参以及默认值: 定义一个函数func_name,其中形式参数为arg,arg1,arg2,arg3,arg4 在这几个参数中arg3和arg4是有默认值的,如果调用函数时只给了三个值,那后面的arg3和arg4就会使

结构体指针传参与返回值

结构体指针 结构体指针大家想必都非常清楚,我们也一直强调传参的时候使用结构体指针(占用4字节),减少对栈的压力.但是今天看linux的标准io时候.发现了localtime时间函数 返回值是一个结构体指针.当时有点懵逼了,开始觉得这样就不对.{当然肯定是我想多了} 为什么会觉得不对那?因为它是个子函数,返回一个局部变量的地址显然是没有价值的.函数调用完就被释放了呀.你在用指针承接也没有价值,完全是野指针啊.百度了一下还真的有人在么做,结果出现了问题.但是其实我的想法是错误的.人家大神怎么可能犯这

ES6中generator传参与返回值

先看两个例子, 1, function* f() { for(var i=0; true; i++) { var reset = yield i; if(reset) { i = -1; } } } var g = f(); document.write(g.next().value) // { value: 0, done: false } document.write(g.next().value) // { value: 1, done: false } document.write(g.

[汇编与C语言关系]2. main函数与启动例程

为什么汇编程序的入口是_start,而C程序的入口是main函数呢?以下就来解释这个问题 在<x86汇编程序基础(AT&T语法)>一文中我们汇编和链接的步骤是: $ as hello.s -o hello.o $ ld hello.o -o hello 我们用gcc main.c -o main开编译一个c程序,其实际分为三个步骤:编译.汇编.链接 $ gcc -S main.c 生成汇编代码 $ gcc -c main.s 生成目标文件 $ gcc main.o 生成可执行文件 我们

第七章之main函数和启动例程

main函数和启动例程 为什么汇编程序的入口是_start,而C程序的入口是main函数呢?本节就来解释这个问题.在讲例 18.1 "最简单的汇编程序"时,我们的汇编和链接步骤是: $ as hello.s -o hello.o$ ld hello.o -o hello以前我们常用gcc main.c -o main命令编译一个程序,其实也可以分三步做,第一步生成汇编代码,第二步生成目标文件,第三步生成可执行文件: $ gcc -S main.c$ gcc -c main.s$ gcc

第33课 main函数与命令行参数

1. main函数的概念 (1)C语言中main函数称之为主函数 (2)一个程序是从main函数开始执行的 [编程实验]main函数的原型究竟是什么 //以下四个main函数都是合法的 //第1种 //main() //{ //} //第2种 //void main() //{ //} //第3种:——标准的入口函数 int main() { return 0; } //第3种:——标准的入口函数 //int main() //{ // //没写返回值 //} [思考]为什么编译器支持那么多种不

main函数的实现解析

main函数的传参的实现,其实也是一个解析字符串的过程:将每个word后一个空格改为“/0”,将单词提取出来. 就是这么简单. 废话不多说,直接上代码: 1 #include<stdio.h> 2 #include<string.h> 3 void shell_parse(char *sbuf) 4 { 5 char mbuf[50]; 6 sprintf(mbuf,"%s",sbuf); 7 char *buf=mbuf;//两次转换,得到一个能++的指针 8