【C语言】C语言函数详解-------详细教学

🚀write in front🚀
🔎大家好,我是gugugu。希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎
🆔本文由 gugugu 原创 CSDN首发🐒 如需转载还请通知⚠
📝个人主页:gugugu—CSDN博客
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
📣系列专栏:gugugu的系列专栏——CSDN博客
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩

前言

博主被催更了,有小伙伴私信博主更一期关于C语言函数的教学,谁让我们是宠粉博主呢,啥也别说了,加更吧!
gogogo!!!
在这里插入图片描述

一、函数介绍

C语言中的函数叫做函数,但是和高中我们数学中所学习的函数还是有区别的,C语言中的函数其实就是子程序,是一个个小模块,也就是一个独立的功能。
通过函数包装,可以用一个函数,多次使用该函数实现同一功能。
经过一段时间的学习之后,我们可能写程序都离不开函数了。

二、函数分类

1、库函数

顾名思义,库函数就是封装在编译器内部的一些函数,各自实现不同的功能,可以在很大程度上帮助程序员提高写代码的效率和代码的质量。

库函数存在很多,我们不需要强行记忆,多多使用就会自然记住,遇到不会的库函数可以去查询。

查询方式在前文有提到过,主要有两种办法
a.进入网站:cplusplus
b.下载msdn软件,在软件内查询。

注意,在使用库函数时,需要在最开头引用头文件,头文件可通过上述两种方式查询

2、自定义函数

自定义函数非常重要,有了自定义函数,我们程序员就成为了魔术师,可以通过自己编写自定义函数达到自己希望实现的功能。

自定义函数的组成如下
函数返回类型 函数名(形参)
{
函数体
}

本文我们将详细讲解自定义函数。

三、函数的参数、

函数的参数分为形参和实参,及形式参数和实际参数

1、实际参数(实参)

实际参数是我们传过去的参数
假设函数为add

add(a,b);

那么在这个函数里面,实参就是a和b

2、形式参数(形参)

形式参数就是接受我们传过去的实参的参数
假设函数还是add

int add(int x,int y)
{
    return x+y;
}

在这个函数里形参就是x和y了

3、形参和实参之间的关系

形参是实参的一份临时拷贝,对形参的改变不会影响实参。
这句话可以这么理解,就是把实参的内容给复制了一下子,暂时放在形参里面,等待进行操作。
我们从地址的角度更容易理解这些话
在这里插入图片描述
可以看到a和x,b和y的数值虽然一样,但是地址却不一样,这就说明,形参只是实参的一份临时拷贝,改变形参不影响实参,那若何改变通过形参改变实参呢?这就得提到传址了,后文会介绍。

形参和实参的名称可以一样,但是地址不一样
形参在使用函数时,申请存储空间,在函数使用完毕时,归还存储空间。

四、函数的调用

1、传值调用

传值调用时,无法通过形参改变实参,顾明思义,肯定是传递值给形参。
在这里插入图片描述
皮一下,重新回来。
写个代码看看。


int add(int x,int y)
{
    return x+y;
}
 
int main()
{
    int a=10;
    int b=20;    
    int ret=add(a,b);
    printf("%d\n",ret);
    return 0;
}

这里就是传值调用,将实参a和b的值传递个形参x和y,返回一个值,这里只是对a和b进行操作,却并没有改变a和b的属性。

2、传址调用

传址调用,顾名思义,就是将地址传递过去,用解引用操作符,指向对象,对对象进行操作,从而改变被指向的对象的属性。

在这里插入图片描述
写一个交换两个数的函数,如果是使用传值调用的话,是无法改变值的属性的,所以无法达到交换的效果。
这里就更加适合传址调用了、

void swap(int* x,int* y)
{
     int tmp=*x;
     *x=*y;
     *y=tmp;
} 

int main()
{
     int a=10;
     int b=20;
     swap(&a,&b);
     printf("%d %d\n”,a,b);
     return 0;
}

这就是传址调用

注意传址调用时,形参需要是指针变量,通过解引用操作符去,找到对象。

五、函数的嵌套使用和链式访问

1、嵌套使用

函数的嵌套使用时非常重要的一个方法,后续会设计到递归啥的,可以说是函数必备,好好学。

函数的嵌套使用
嵌套使用,通俗来说就是函数里面再用函数,

这个很好理解,写个代码就可以理解

#include<stdio.h>
int main()
{
    printf("Hello world\n");
    return 0;
}

这里一个main函数里面嵌套了一个库函数printf
这就是嵌套了,函数里面套函数,当然自定义函数也是这样。

2、链式访问

链式访问是指将一个函数的返回值作为另一个函数的参数进行访问。

写一个很有意思的代码看看。

#include<stdio.h>
int main()
{
    printf("%d", printf("%d", printf("%d", 43)));
    return 0;
}

不知道有没有小伙伴能够说出来会打印什么吗?
在这里插入图片描述
答案是4321

在这里插入图片描述
来,我们解释一下为什么是4321,这是一个很经典的链式访问

这里我们先了解一下printf函数的返回值,printf返回在屏幕上打印的字符的个数。
首先,肯定打印43,接着返回值为2,触发链式访问,第二次打印2,返回值为1,再次触发链式访问,打印1 。
所以最后打印4321.
在这里插入图片描述

六、函数的声明和定义

1、函数的声明

  • 函数的声明主要的目的在于告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。

  • 但是这个函数具体存在不存在,函数声明决定不了。

  • 函数的声明一般出现在函数的使用之前。要满足先声明后使用。

  • 函数的声明一般要放在头文件中的。

void swap(int x,int y);

这就是声明了,声明的格式就是函数头加一个分号

2、函数的定义

函数的定义其实就是写函数的过程,我们写的整个函数,完成函数头加函数体的过程就是函数的定义。

注意函数可不能嵌套定义
这样子就是错的

         int add(int x,int y)//加法函数
{
    return x + y;
    int sub(int x, int y)//这个减法函数被嵌套定义在了加法函数内部,这种写法是错的
    {
        return x - y;
    }
}

这里就犯了嵌套定义的错误。

正确的定义方法应该是这样子的


int add(int x,int y)//加法函数
{
    return x + y;
}
int sub(int x, int y)//减法函数
{
    return x - y;
}

3、模块化编程

模块化编程是分重要,在出现大规模编程时,模块化编程必不可少。

模块化编程在上篇文章扫雷中就是一个案例
点击这里即可查看 扫雷

我们在写代码的时候可能会想:我把所有的代码写在一个源文件中,这样找起来不就方便了吗。

其实,这样的习惯对日后程序的开发是不利的。

我们的社会是有各自的分工的,当我们在开发一个程序的时候,我们往往只需要负责一个大的工程中的部分内容,比如一个人去写主程序,一个人写函数等等,而我们将工程的各个部分分开就可以更快地快找到bug并对应修复。

这样,当我们写一个函数时,就需要这样的文件分配:

  • 函数声明——头文件.h
  • 函数定义——函数实现的源文件.c
    每一个函数都可以分成这两个文件编写,也可以几个函数写在两个文件中。

今天的分享到这里结束啦,谢谢观看
至于递归就放在后面再讲吧,这个就比较复杂啦。

!!!!!!!!点个三连吧!!!!!!!
!!!!!!!!!求关注!!!!!!!
在这里插入图片描述

  • 18
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值