C语言中函数

本文介绍了C语言中的函数概念,包括从定义、参数和返回值角度的分类,以及函数的定义、声明和调用方式。特别关注了库函数、自定义函数和系统调用的区别。
摘要由CSDN通过智能技术生成

目录

函数的概念

函数的分类

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

2.从参数角度分类 

3.从返回值角度分类

函数的定义 

函数的声明

函数声明的概念

为什么要进行函数声明

声明的方法

函数的调用

有无返回值时函数的调用方法

有无形参时函数的调用方法

总结


从0开始记录我的学习历程,我会尽我所能,写出最最大白话的文章,希望能够帮到你,谢谢。


提示:文章作者为初学者,有问题请评论指正,感谢。

函数的概念

函数是 c 语言的功能单位,实现一个功能可以封装一个函数来实现。

定义函数的时候一切以功能为目的,根据功能去定函数的参数和返回值。

/*你可以理解成C语言中的函数就像是一个小助手。当你想要完成一个任务时,你告诉这个助手需要什么(参数),助手就会根据你给的东西去做事情,然后告诉你结果(返回值)。这样,你就不用每次都亲自去做同样的事情,只需要让助手帮你做就行了。简单来说,函数就是帮你完成特定任务的代码块。*/

函数的分类

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

  1. 库函数: 就像是超市里现成的食品,库函数是C语言标准库或其他库中已经写好的函数。你不需要自己从头开始做,只要知道怎么用就行了。比如 printf() 函数,它就是一个库函数,你可以用它来在屏幕上显示文字,而不需要知道它内部是怎么实现的。

  2. 自定义函数: 这就像是你自己在家做饭。自定义函数是你根据需要自己写的函数。你决定它做什么,需要哪些材料(参数),以及最后会产出什么(返回值)。自定义函数让你能够根据自己的需求创建功能,使得代码更加有组织,也方便重复使用。

  3. 系统调用: 系统调用有点像是叫外卖。当你需要操作系统层面的一些功能,比如读写文件,你会使用系统调用。这些函数直接与操作系统交互,执行一些底层操作。系统调用通常比库函数更接近硬件,处理的是更为基础和核心的任务。

反正你可以这么理解,库函数是别人写好你可以直接用的;自定义函数是你根据自己的需求写的;系统调用是让你能够利用操作系统提供的功能。

2.从参数角度分类 

1.有参函数

  • 有参函数就像是一个厨师,他需要一些食材来做菜。这些食材就是函数的参数。参数可以是一个,也可以是多个,具体取决于函数的功能。
  • 例如,你可以有一个函数 int max(int x, int y),它接受两个整数作为参数,然后找出其中较大的那个数。这就像是你告诉厨师:“我有两个苹果,你帮我找出最大的那个苹果。”

2.无参函数

  • 无参函数就像是一个魔术师,他不需要任何道具,只凭空变出了一只兔子。这些函数没有参数,它们自己内部完成了一些操作。
  • 例如,你可以有一个函数 void greet(),它不需要任何输入,只是打印出一句问候语。这就像是魔术师不需要任何道具,就能变出一只兔子。

3.从返回值角度分类

  1. 带返回值的函数

    • 这就像是你请了一个厨师,他会做一道菜并把它送到你手里。这个菜就是函数的返回值。
    • 例如,你可以有一个函数 int add(int x, int y),它接受两个数字(x 和 y),然后把它们相加,最后返回结果。这就像是厨师告诉你:“我会把这两个食材加在一起,你等着拿到结果吧!”
    • 在这个例子中,返回值类型是 int,表示这个函数会返回一个整数。
    • 注意:函数有形参,可以是一个,或者多个,参数的类型随便 完全取决于函数的功能
  2. 没有返回值的函数

    • 这就像是你请了一个服务员,他会帮你做一些事情,但不会给你任何东西。你只是想让他完成一项任务。
    • 例如,你可以有一个函数 int fun(void),它不需要任何输入,只是打印出问候语。这就像是服务员告诉你:“好的,我会给你打印出问候语,但不会给你其他东西。”
    • 在这个例子中,返回值类型是 void,表示这个函数不会返回任何东西。
    • 注意:函数没有参数,在形参列表的位置写个 void 或什么都不写 

函数的定义 

函数的定义:简单来说,就是告诉计算机这个函数要做什么,以及如何做。函数的定义包括几个部分:返回值类型函数名形式参数列表(简称形参列表)和函数体

  • 返回值类型:这告诉编译器函数执行完毕后会返回什么类型的数据。如果函数不需要返回任何值,那么这个类型就是 void
  • 函数名:这是函数的唯一标识,用于在其他地方调用这个函数。
  • 形式参数列表:这里列出了传递给函数的变量,我们称之为参数。每个参数都需要指定一个类型,因为C语言是静态类型的语言,这意味着每个变量的类型必须在编译时就确定。
  • 函数体:这是花括号 {} 中的部分,包含了实现函数功能的所有代码。
#include <stdio.h >
int add(int a, int b) {
	return a + b;
}
int main() {
	
	int c = add(2, 3);
	printf("%d",c);
	return 0;
}

这里,int 是返回值类型,表示这个函数会返回一个整数。add 是函数名,int a, int b 是形式参数列表,表示这个函数需要两个整数作为输入。最后,花括号中的 return a + b; 是函数体,最后在主函数中调用add,它描述了这个函数的具体操作,即返回这两个整数的和。

函数的声明

函数声明的概念

函数声明,也叫做函数原型,其实就是告诉编译器:嘿,这里有一个函数,它长这样,但具体做什么,我稍后再告诉你。函数声明包括函数的返回类型、函数名和参数类型,但不包括函数体。它像是一个承诺,告诉编译器将会有一个这样的函数可以使用。注:函数的声明可以声明多次。

为什么要进行函数声明

为什么要这么做呢?因为在C语言中,如果你想在一个函数中调用另一个函数,编译器需要提前知道那个函数的存在和它的细节。如果你没有提前声明,当编译器遇到那个函数的调用时,它会一头雾水,不知道你在说什么,然后就会报错。所以,函数声明就像是给编译器的一个小提示,让它知道有这么一个函数,即使它的具体内容还没写出来。

声明的方法

1.什么时候需要声明

1.1被调函数在上,主调函数在下 例:

有无形参时函数的调用方法

  • void fun(void) {
    printf( "hello world\n"); }
    int main() {
    fun(); }

    这种情况下不需要声明

  • 下面是主调函数和被调函数在同一个.c文件的情况。

  • 1.2 被调函数在下,主调函数在上 例:

  • #include <stdio.h >
    void fun(void);//这里声明
    int main() {
    	fun();}
    void fun(void) {
    	printf("hello world\n");}
    

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

  • 那我们该咋个声明呢,有直接声明法和间接声明法两种方法。

  • 当主调函数和被调函数在同一个.c 文件中时

  • 直接申明法就是将被调用的函数的第一行拷贝过去,后面加分号就可以了。

  • void fun(void); //这里声明的哦
    int main()
    {
    fun(); }
    void fun(void) {
    printf( "hello world\n"); }

    间接申明法

  • 将函数的声明放在头文件中,.c 程序包含头文件即可

  • .c文件代码

  • #include<stdio.h>
    #include"a.h"// 包含头文件,使得fun函数的声明对这个文件可见
    
    int main() {
        fun(); // 调用fun函数
        return 0;
    }
    void fun(void) {
        printf("hello world\n");
    }
    	

    .h文件代码   这个是头文件 下面有图

  • extern void fun(void);

  •  主调函数和被调函数不在同一个.c 文件中 的时候 一定要声明

    声明的方法:

    直接声明法

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

  • 间接声明法

    将函数的声明放在头文件中,.c 程序包含头文件即可(结合上面看喽,敲一下就知道咋回事了)。

  • 函数的调用

  • 有无返回值时函数的调用方法

  • 有返回值的函数

    • 当一个函数有返回值时,这意味着它会在执行完毕后给出一个结果。
    • 你可以把这个结果存储在一个变量中,或者直接用在表达式里。
    • 例如,如果有一个返回整数的 add 函数,你可以这样调用它:
      int sum = add(5, 3); // 将返回值存储在sum变量中
      
    • 或者直接使用它的返回值:
      printf("The sum is %d\n", add(5, 3)); // 直接打印返回值
      
  • 无返回值的函数

    • 如果一个函数没有返回值(即返回类型为 void),它就不会给出任何结果。
    • 这种函数通常是执行一些操作,比如打印信息,但不需要返回数据。
    • 调用无返回值的函数很简单,直接写函数名和参数(如果有的话)就可以了:
      printMessage(); // 调用一个不返回任何值的函数
      
  • 有形参的函数

    • 当一个函数有形参时,你需要在调用函数时提供相应的实际参数(实参)。
    • 实参的数量和类型必须与函数声明中的形参相匹配。
    • 例如,如果 add 函数需要两个整数作为参数,你就需要这样调用它:
      int result = add(10, 20); // 传递两个整数作为参数
      
  • 无形参的函数

    • 如果一个函数没有形参,那么在调用时你不需要提供任何参数。
    • 这种函数在调用时后面的括号是空的,但括号仍然是必须的。
    • 例如,一个简单的打印函数可能看起来像这样:
      sayHello(); // 调用一个不需要任何参数的函数

总结

以上就是今天要讲的内容,本文仅仅简单介绍了C语言中的函数的分类声明以及调用,祝愿你我的朋友在学习的路上一帆风顺,也祝愿我会成为一个优秀的嵌入式工程师。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值