C的实用笔记17——函数调用的四过程和三条件

1.函数调用的四个过程

  1. 知识点1:我们一般将普通局部变量称为局部变量,还有一种局部变量称为静态局部变量。函数中的普通局部变量最后会进行内存释放,但是静态局部变量在函数结束后不会释放内存(后面再讲)
  2. 知识点2:函数的形式参数只能是普通局部变量,不可能是静态局部变量,所以,函数的形式参数在函数结束后,一定会被释放内存。

1、开辟内存空间:未出现函数调用,也就是没有进入函数之前,函数的形式参数并不占用内存的存储单元,发生调用时,形参才被临时分配内存单元。

2、值传递:实参可以是变量、常量、表达式,将实参对应的值传递给形参,于是形式参数在获得临时内存单元、确认变量名、确认变量存储类型的同时,也获得了变量值。

3、值返回:函数体中,程序碰到了return语句,它会将函数值返回给主调函数。

4、内存释放:结束函数调用,形式参数的临时内存单元会被释放掉。由于实参和形参的在调用过程中它们不是一个内存地址,所以它们根本不是一个变量,形参值的改变不会改变实参的值。

2.函数调用的三条件

  1. 条件1(函数在使用前已经被定义):定义语句写在调用语句前面,因为C语言自上而下执行,这和变量先定义后使用是一样的道理。比如:
    #include <stdio.h>
    int getMaxDataFromTwo(int x, int y)			//函数的定义写在函数的调用前面
    {
        int z;
        z = x > y ? x : y;
        return z;
    }
    int main(int argc, char const *argv[])
    {
        int data1;
        int data2;
        int dataMax;
        puts("请输入两个数");
        scanf("%d %d", &data1, &data2);
        dataMax = getMaxDataFromTwo(data1, data2);	//调用函数
        printf("最大数是%d\n", dataMax);
        return 0;
    }

  2. 条件2(调用的是库函数):除了系统自带的库函数之外,我们自己也可以制作库函数。库函数的原理很简单,就是将函数的声明放在某个.h头文件之中,函数代码实现过程放在同名的C库之中。比如:
    #include <stdio.h>						//包含头文件,printf函数的声明语句就在里面
    int main(int argc, char const *argv[])
    {
        printf("最大数是%d\n", 2);			//pritnf函数是库函数
        return 0;
    }

  3. 条件3(使用前进行函数声明):我们可以通过函数原型式声明来完成。比如:
    #include <stdio.h>
    int getMaxDataFromTwo(int x, int y);			//这时候需要写声明:函数原型式声明
    原型式声明也可以这么写:int getMaxDataFromTwo(int, int);
    int main(int argc, char const *argv[])
    {
        int data1;
        int data2;
        int dataMax;
        puts("请输入两个数");
        scanf("%d %d", &data1, &data2);
        dataMax = getMaxDataFromTwo(data1, data2);	//调用函数
        printf("最大数是%d\n", dataMax);
        return 0;
    }
    int getMaxDataFromTwo(int x, int y)				//函数的定义写在函数的调用后面
    {
        int z;
        z = x > y ? x : y;
        return z;
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值