C语言---函数---总结

news2024/11/14 20:04:55

🚀write in front🚀
📝个人主页:认真写博客的夏目浅石.
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
📣系列专栏:鹏哥带我学c带我飞
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊
✉️为什么我们不知疲倦,因为我们都在做自己所热爱的事 ♐

文章目录

  • 🚀write in front🚀
    • 一、🌸函数是什么?
    • 二、🌷C语言中函数的分类
      • 2.1.🚥库函数
      • 2.2.🚥自定义函数
    • 三、🌺函数的参数
      • 3.1.🚥实际参数(实参)
      • 3.2.🚥形式参数(形参)
    • 四、🌼函数的调用
      • 4.1.🚥传值调用
      • 4.2.🚥传址调用
    • 五、🌻函数的嵌套调用和链式访问
      • 5.1.🚥嵌套调用
      • 5.2.🚥链式访问
    • 六、 🦋函数的声明和定义
      • 6.1.🚥函数声明:
      • 6.2.🚥函数定义:
    • 七、 🍀函数递归
      • 7.1.🚥什么是递归?
      • 7.2.🚥递归的两个必要条件


🚀write in front🚀

一、🌸函数是什么?

维基百科中对函数的定义:子程序
在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method,
subprogram, callable unit),是一个大型程序中的某部分代码, 由一个或多个语句块组
成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。

一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软
件库。

二、🌷C语言中函数的分类

2.1.🚥库函数

为什么会有库函数?

  1. 我们知道在我们学习C语言编程的时候,总是在一个代码编写完成之后迫不及待的想知道结果,想
    把这个结果打印到我们的屏幕上看看。这个时候我们会频繁的使用一个功能:将信息按照一定的格
    式打印到屏幕上(printf)。
  2. 在编程的过程中我们会频繁的做一些字符串的拷贝工作(strcpy)。
  3. 在编程是我们也计算,总是会计算n的k次方这样的运算(pow)。

那怎么学习库函数呢?
这里有两个推荐学习的网站 cppreference.com
cplusplus.com - The C++ Resources Network
如下图学习一个函数顺便看一下使用方法:
在这里插入图片描述
这里左边是c语言的库函数,右边则是函数的运用功能的介绍和使用方法。

2.2.🚥自定义函数

如果库函数能干所有的事情,那还要程序员干什么?所以更加重要的是自定义函数。自定义函数和库函数一样,有函数名,返回值类型和函数参数。但是不一样的是这些都是我们自己来设计。这给程序员一个很大的发挥空间。
函数的组成:

ret_type fun_name(para1, * )
{
 statement;//语句项
}
ret_type 返回类型
fun_name 函数名
para1    函数参数
//其实就是这四项的组成。

三、🌺函数的参数

3.1.🚥实际参数(实参)

真实传给函数的参数,叫实参。
实参可以是:常量、变量、表达式、函数等。
无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形
参。

3.2.🚥形式参数(形参)

形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内
存单元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。
在这里插入图片描述
形参和实参的名字可以一样,不影响什么。

四、🌼函数的调用

4.1.🚥传值调用

特点:函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参
举个例子:写一个函数可以交换两个整形变量的内容。
![在这里插入图片描述](https://img-blog.csdnimg.cn/a1aaa30fb62c456db0d530a045546d1f.png
但是这里如果把打印printf写到主函数里面就会导致无法交换,这里就需要用到传址调用

4.2.🚥传址调用

传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量。
在这里插入图片描述
实参中,我将a,b的地址给传了进去,形参又用p1和p2两个指针存储了a,b的地址,接着用 * 操作符找到了a,b的地址并修改了里面的内容。

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

函数和函数之间可以根据实际的需求进行组合的,也就是互相调用的。

5.1.🚥嵌套调用

#include <stdio.h>
void new_line()
{
	printf("hehe\n");
}
void three_line()
{
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		new_line();
	}
}
int main()
{
	three_line();
	return 0;
}
int main()
{
	void test()
	{
		//......
	}
	return 0;
}

这种就是嵌套定义,即在一个函数内部去定义函数,是不可以的。
函数可以嵌套调用,但是不能嵌套定义。

5.2.🚥链式访问

把一个函数的返回值作为另外一个函数的参数。
在这里插入图片描述
这个为什么打印的是4321呢?我们要查一下printf的返回值。所以结果是4321也就不足为奇了。
在这里插入图片描述
在这里插入图片描述

六、 🦋函数的声明和定义

6.1.🚥函数声明:

  1. 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数
    声明决定不了。
  2. 函数的声明一般出现在函数的使用之前。要满足先声明后使用。
  3. 函数的声明一般要放在头文件中的。

6.2.🚥函数定义:

函数的定义是指函数的具体实现,交待函数的功能实现
test.h的内容
放置函数的声明

#ifndef __TEST_H__
#define __TEST_H__
//函数的声明
int Add(int x, int y);
#endif //__TEST_H__

test.c的内容
放置函数的实现

#include "test.h"
//函数Add的实现
int Add(int x, int y)
{
 return x+y;
}

1. 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数
声明决定不了。
2. 函数的声明一般出现在函数的使用之前。要满足先声明后使用。
3. 函数的声明一般要放在头文件中的。

七、 🍀函数递归

7.1.🚥什么是递归?

程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
递归的主要思考方式在于:把大事化小

7.2.🚥递归的两个必要条件

1.存在限制条件,当满足这个限制条件的时候,递归便不再继续。
2.每次递归调用之后越来越接近这个限制条件。

后面我会出一期详细的递归去讲解递归的用法和功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/67489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文了解Linux内核网络设备驱动

1. 接收数据包过程概述 介绍数据包收包过程&#xff0c;有助于我们了解Linux内核网络设备在数据收包过程中的位置&#xff0c;下面从宏观的角度介绍数据包从被网卡接收到进入 socket 接收队列的整个过程&#xff1a; 加载网卡驱动&#xff0c;初始化数据包从外部网络进入网卡…

月子会所管理系统| 月子会所小程序| 数字化门店转型

随着二孩三孩政策的相继开放&#xff0c;中国母婴市场呈现出稳定增长的局面&#xff0c;据相关数据显示&#xff0c;2019年中国母婴市场规模达34950亿元&#xff0c;预计2024年将增长到70000亿元。母婴行业的细分类高&#xff0c;同时还可与多行业进行对接。 母婴月子会所近些年…

Vue3 事件处理

Vue3 事件处理1.基本使用2.事件修饰符3.按键修饰符1.基本使用 我们可以使用 v-on 指令来监听 DOM 事件&#xff0c;从而执行 JavaScript 代码。 v-on 指令可以缩写为 符号。 语法格式&#xff1a; v-on:click"methodName" 或 click"methodName"一个最…

基于jsp+ssm的驾校预约管理系统-计算机毕业设计

项目介绍 驾校预约管理系统是一个高校用来管理教员和学员的授课信息并存储档案必需的一个管理系统&#xff0c;由于时代的进步&#xff0c;它成为了一个现代化管理不可缺少的一部分。它的查询的方便简洁&#xff0c;可以为一个驾校经营者节约足够的时间&#xff0c;为驾校迅速…

QWebEngine集成Netron可视化模型

Netron是一个用于可视化深度学习网络模型的工具软件&#xff0c;主体以JavaScript语言实现&#xff0c;源码在: https://github.com/lutzroeder/netron 。用户可以使用各系统平台的安装包进行安装之后使用&#xff0c;也可以用浏览器使用在线版本: Netron。 Netron支持几乎所有…

ChatGPT 和 Midjourney 将改变我们的生活,日常工作流程将完全改变并与这些新型工具集成

上周末我花了很多时间先玩 Open AI ChatGPT,然后玩 Midjourney。起初我笑了,然后我开始完全被各种可能性所困扰,然后我终于意识到了它的潜力,并开始将其用于更有成效的工作。 注意:我本可以用它来制作一个引人入胜的点击诱饵标题,但我没有. 这是我问 Open AI 聊天的第一…

在python中调用ChatGPT,并使用tkinter打包成exe

在python中调用ChatGpt一、前提1. 安装库2. 获取key3. 调用示例二、tkinter桌面应用网页使用与python使用的对比用它来搜题你将会知道什么叫爽一、前提 小伙伴们都知道&#xff0c;最近这两天ChatGpt最近很火爆&#xff0c;更重要的是他对中文的兼容性很好&#xff0c;比如我问…

以“社交和品质”打通长线运营,UTONMOS打造真正的Web3.0链游破圈之作

元宇宙&#xff08;Metaverse&#xff09;&#xff0c;这个来源于科幻小说的概念已成为真实世界中的流行语。在大众对元宇宙的构想中&#xff0c;" 游戏 " 是优先级最高的落地场景之一。《头号玩家》《赛博朋克 2077》等作品中&#xff0c;" 游戏 " 也多次…

【20221206】【每日一题】01背包的基础

思路&#xff1a; 二维数组 动规五部曲 1、确定dp数组以及下标含义&#xff1a;二维数组dp[i][j]表示从下标为0-i的物品里任意取&#xff0c;放入容量为j的背包&#xff0c;价值总和最大为多少&#xff1b; 2、确定递推关系式&#xff1a;从两个方向推dp[i][j]&#xff0c;没…

CSS 之 渐变色边框

一、渐变色边框 如果我们前端最亲爱的UI设计师&#xff0c;让我们给盒子绘制一个渐变色的边框&#xff0c;而且盒子的宽高还需要随着内容变化而变化&#xff0c;那我们就不能通过切图来解决问题&#xff0c;所以我们可以这么说&#xff1a; 但是我相信优秀的你肯定不会说做不…

如何删除密码?知道密码和不知道密码的情况

压缩包设置了密码&#xff0c;就需要输入压缩包密码才能顺利解压文件。 有些时候我们加密了压缩包之后&#xff0c;过了一段时间可能就不需要再加密压缩包里的文件了。 有些时候我们加密了压缩包之后&#xff0c;长时间没有使用&#xff0c;又没有将密码记录在一个地方&#…

基于 LSTM 的分布式能源发电预测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f389;作者研究&#xff1a;&#x1f3c5;&#x1f3c5;&#x1f3c5;主要研究方向是电力系统和智能算法、机器学…

CNAME记录和A记录

文章目录定义CNAME使用说明总结定义 A记录&#xff1a;A (Address) 记录是用来指定主机名&#xff08;或域名&#xff09;对应的IP地址记录。CNAME记录&#xff1a;CName记录是Canonical Name的简称&#xff0c;通常称别名指向&#xff0c;CNAME记录可用于将一个域名别名为另一…

太强了!GitHub大佬白嫖的SpringCloud微服务进阶宝典,啃完感觉能吊锤面试官!

自 2014 年起&#xff0c;微服务技术一直火热至今。随着越来越完善的微服务技术栈的发布&#xff0c;以及越来越多的微服务项目实际的落地和上线&#xff0c;使用 Java 技术栈的企业应该都在尝试或者已经落地了各自的微服务项目。同时&#xff0c;通过招聘网站的信息和每次面试…

如何用蓝牙实现无线定位(五)--双定位显示

1. 机器人定位装置的构建 按照上面的针脚使用杜邦线将救援机器人定位装置的主从蓝牙连接到主控板上&#xff0c;注意错误的连接会导致模块损坏【参考视频】 2. 机器人位置的获取与发送 (1) 在机器人定位装置的控制板中烧录以下程序&#xff08;robot.ino&#xff09; /*-----…

深度解读汽车域控制器

已剪辑自: https://mp.weixin.qq.com/s?__bizMzg4NjIxODk4Mg&mid2247496089&idx1&sndb5c08f97342decfabc9ce985ec75aaa&chksmcf9fb810f8e83106994f2f2b9ca0387eaca7543d36b1673d4fc00bdfe07fbc5099322d41a702&scene21#wechat_redirect * * 过去十多年的…

华为机试-字符串合并处理

描述 按照指定规则对输入的字符串进行处理。 详细描述 第一步&#xff1a;将输入的两个字符串str1和str2进行前后合并。如给定字符串 “dec” 和字符串 “fab” &#xff0c; 合并后生成的字符串为 “decfab” 第二步&#xff1a;对合并后的字符串进行排序&#xff0c;要求…

拖拽式网页制作工具

拖拽式网页制作工具是什么&#xff0c;有什么优势&#xff0c;怎么使用&#xff1f; 拖拽式网页制作工具是什么: 它是一款可以帮助企业、机构、个体户快速搭建网站的一款工具&#xff0c;通过简单易上手的操作&#xff0c;免除学习代码、学习设计等繁琐步骤&#xff0c;利用工…

2022.12.2Treats for the Cows POJ - 3186(区间dp

原题链接&#xff1a;传送门 FJ has purchased N (1 < N < 2000) yummy treats for the cows who get money for giving vast amounts of milk. FJ sells one treat per day and wants to maximize the money he receives over a given period time. The treats are inte…

请不要直接拆除或更换旧光纤!Softing为您提供光纤以太网网络解决方案

Softing的Phoenix Digital光纤以太网网络冗余模块与传统光纤相兼容。通过使用Phoenix Digital模块&#xff0c;用户无需更换传统光纤和远程I/O设备。 升级工业网络是一项复杂的工作&#xff0c;用户需要耗费大量的时间、成本和其他资源来确保新建网络可以满足系统应用中的所有要…