• 14.函数的使用


    函数的概念

    函数是c语言的功能单位,实现一个功能可以封装成一个函数来实现。
    定义函数的时候一切以功能为目的,根据功能去定函数的参数和返回值。

    函数的分类

    1.从定义角度分类(即函数是谁实现的)

    库函数(c库实现的)
    自定义函数(程序员自己实现的函数)
    系统调用(操作系统实现的函数)

    2.从参数角度分类
    2.1有参函数

    函数有形参,可以是一个,或者多个,参数类型随便
    完全取决于函数的功能

    int fun(int a,float b,double c)
    {
    }

    int max(int x,int y)
    {
    }

    2.2 无参函数

    函数没有参数,在形参列表的位置写void或什么都不写

    int fun(void)
    {
    }

    int fun()
    {
    }

    3.从返回值的角度分类
    3.1 带返回值的函数

    在定义函数的时候,必须带着返回值类型,在函数体里,必须有return
    如果没有返回值类型,默认返回整型。

    char fun() //定义了一个返回字符数据的函数
    {
    char b = ‘a’;
    return b;
    }
    fun()
    {
    return 1;
    }

    注:在定义函数的时候,函数的返回值类型取决于函数的功能。

    3.2 没返回值的函数

    在定义函数的时候,函数名字前面加void

    void fun(形参表)
    {
    return ;
    }

    如果想结束函数,返回被调用的地方,使用return ;

    #include
    int max(int x, int y)
    {
    	int z;
    	if (x > y) {
    		z = x;
    	}
    	else {
    		z = y;
    	}
    	return z;
    }
    void help(void)
    {
    	printf("***********************\n");
    	printf("打印帮助信息\n");
    	printf("***********************\n");
    
    }
    int main()
    {
    	int num;
    	help();
    	num = max(5, 10);
    	printf("num=%d\n", num);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    在这里插入图片描述

    函数的定义

    1.函数定义的方法

    返回值类型 函数名字(形参列表)
    {
    //函数体,函数的功能在函数体里实现
    }

    int max(int x,int y)
    {
    int z;
    if(x>y)
    z=x;
    else
    z=y;
    return z;
    }

    注:形参必须带类型,以逗号分隔
    函数的定义不能嵌套,即不能在一个函数体内定义另外一个函数。
    所有函数的定义是平行的。

    void fun(void)
    {
    ;
    ;
    void fun2(void) //错误,不能在fun函数体内再定义fun2函数。
    {
    ;
    }
    }

    注:在一个程序中,函数只能定义一次。

    函数的声明

    1.概念

    对已定义的函数,进行说明。
    函数的声明可以声明多次。

    2.为什么要声明

    有些情况下,如果不对函数进行声明,编译器在编译的时候,可能不认识这个函数。
    因为编译器在编译c程序的时候,从上往下进行编译。

    3.声明的方法

    什么时候需要声明

    1)主调函数和被调函数在同一个.c文件中的时候

    被调函数在上,主调函数在下,这种情况不需要声明。

    void fun(void)
    {
    printf(“hello word\n”);
    }

    int main()
    {
    fun();
    }

    被调函数在下,主调函数在上,编译器从上往下编译,在main函数(主调函数),不认识fun,需要声明

    int main()
    {
    fun();
    }

    void fun(void)
    {
    printf(“hello word\n”);
    }

    3.1直接声明法

    将被调用的函数第一行拷贝过去,后面加分号

    #include
    void fun(void);
    int main()
    {
    	fun();
    	return 0;
    }
    void fun(void)
    {
    	printf("hello world!\n");
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    3.2 间接声明法

    将函数的声明放在头文件中,.c程序包含头文件即可。
    在这里插入图片描述
    在这里插入图片描述
    31.c的内容

    #include
    #include"1.h"
    int main()
    {
    	fun();
    	return 0;
    }
    void fun(void)
    {
    	printf("hello world!\n");
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    1.h的内容:

    extern void fun(void);
    
    • 1
    2)主调函数和被调函数不再同一个.c文件中的时候

    一定要声明
    直接声明法:
    将被调用的函数的第一行拷贝过去,后面加分号,前面加extern
    间接声明法:
    将函数的声明放在头文件中,.c程序包含头文件即可。

    函数的调用

    函数调用的方法
    变量=函数名(实参列表); //带返回值
    函数名(实参列表); //不带返回值

    1.有无返回值

    有返回值的,根据返回值的类型,需要在主调函数中定义一个对应类型的变量,用来接收返回值

    int max( int x, int y) // x,y是形参
    {
    }

    int main()
    {
    int num; //需要定义一个num接受max函数的返回值
    num = max(4,8); //4和8就是实参
    }

    没有返回值的函数,不需要接受返回值。

    void fun(void)
    {
    printf(''hello world\n");
    }

    int main()
    {
    fun();
    }

    2.有无形参

    函数名( 实参列表 ); //带形参的
    函数名(); // 没有形参
    注意:实参可以是常量,可以是变量,或者是表达式
    形参是变量,是被调函数的局部变量

    函数总结

    在定义函数的时候,关于函数的参数和返回值是什么情况,完全取决于函数的功能。

    使用函数的好处:
    1.定义一次,可以多次调用,减少代码冗余。
    2.使代码,模块化更好,方便程序调用,而且阅读方便。

  • 相关阅读:
    【2024秋招】2023-9-14 最右线下后端开发二面
    ORA-07445: exception encountered: core dump [kdxlin()+4088]---惜分飞
    基于2D连续图像序列的行人骨架关节角度估计
    18. “状态变化”模式 之State模式(状态模式)
    「点燃我,温暖你」用Python制作一个动态爱心效果
    如何使用libswscale库将YUV420P格式的图像序列转换为RGB24格式输出?
    软考-系统开发基础
    Apollo配置中心-手把手教你搭建Apollo配置中心运行环境
    【接口自动化测试】第一节.接口自动化测试基础和框架介绍
    Java开发扫雷游戏项目,JFram类的使用
  • 原文地址:https://blog.csdn.net/GUDGET/article/details/127997672