自学第十五天----深入理解函数上

1. 函数是什么?

维基百科中对函数的定义: 子程序

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

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

2. C语言中函数

   1.库函数
   2.自定义函数

 2.1 库函数:

像上面我们描述的基础功能,它们不是业务性的代码。我们在开发的过程中每个程序员都可能用的到, 为了支持可移植性和提高程序的效率,所以C语言的基础库中提供了一系列类似的库函数,方便程序员 进行软件开发。

说白了就是开发c语言的人帮你设定好的函数,你直接拿去用就可以了

这是c++的库函数网站: www.cplusplus.com

简单的总结,C语言常用的库函数都有:

---IO函数

---字符串操作函数

---字符操作函数

---内存操作函数

---时间/日期函数

---数学函数

---其他库函数 

 需要全部记住吗?

Nonono! 只需要学会查询工具的使用:

MSDN(Microsoft Developer Network)

www.cplusplus.com

http://en.cppreference.com(英文版)

http://zh.cppreference.com(中文版)

2.2 自定义函 

相比于库函数更加重要的是自定义函数。

自定义函数和库函数一样,有函数名,返回值类型和函数参数。 但是不一样的是这些都是我们自己来设计。这给程序员一个很大的发挥空间。

ret_type fun_name(para1, * ){statement;//语句项
}ret_type  返回类型
fun_name   函数名
para1      函数参数

举一个很经典的例子

写一个函数可以交换两个整形变量的内容。

首先说明一下,函数中如果不需要返回值,则使用void关键字 

#include <stdio.h>
void Swap1(int x, int y){int tmp = 0;tmp = x;x = y;y = tmp;}int main(){int num1 = 1;int num2 = 2;Swap1(num1, num2);printf("Swap1::num1 = %d num2 = %d\n", num1, num2);return 0;
}

看上去实现了其实并没有,因为函数中x,y与我们输入的a,b所代表的内存都不一样,这里只是将a与b的值赋给x,y进行计算,最终与a和b无关。

正确的写法应该是用int*调用其内存,使我们的a,b与x,y是相同的(所代表的内存相同)

 //正确的版本
void Swap2(int *px, int *py){int tmp = 0;tmp = *px;*px = *py;*py = tmp;}int main(){int num1 = 1;int num2 = 2;printf("Swap2::num1 = %d num2 = %d\n", num1, num2);return 0;}

 3. 函数的参数

3.1 实际参数(实参):

---真实传给函数的参数,叫实参。

---实参可以是:常量、变量、表达式、函数等。

---无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参

3.2 形式参数(形参): 

---形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内 存单元),所以叫形式参数。

---形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。

>   上述例子中 Swap1 和 num2 和传 给Swap2函数的 Swap2 函数中的参数 &num1 , x,y,px,py都是形式参数。

>   在main函数中传给 Swap1 的 &num1 ,&num2 是实际参数。 

可以看到 Swap1 函数在调用的时候,x,y拥有自己的空间,同时拥有了和实参一模一样的内容。 所以我们可以简单的认为:形参实例化之后其实相当于实参的一份临时拷贝。 

也就是说形式参数在使用时是根据输入参数多少重新分配相应的内存,再进行计算,与输入参数没有本质联系

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

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

相关文章

python怎么求因数

要想做到python语言求因数方法&#xff0c;首先要明白其中的原理&#xff1a; 1、对由123456789这九个数字组成的9位数进行分解质因数。 2、1234576982x3x3x7x13x23x29x113&#xff0c;所以他的值因数是113。 3、总共有362880种可能&#xff0c;从中找出值因数中最小的数字和…

一节课说明一类奥数题系列——约数与倍数

小学奥数-约数与倍数 约数和倍数&#xff1a;若整数 a 能够被 b 整除&#xff0c;a 叫做 b 的倍数&#xff0c;b 就叫做 a 的约数。 公约数&#xff1a;几个数公有的约数&#xff0c;叫做这几个数的公约数&#xff1b;其中最大的一个叫做这几 个数的最大公约数。a,b两数的最…

学生宿舍反限电插座控制功能

石家庄光大远通电气有限公司反限电插座功能的技术防止学生通过半波整流进行防止学生改变负载特性(阻性变为非阻性)的防止学生通过可控硅调压技术(进行功率调整达到使用目的)恶性负载限制次数设置:管理部门可以根据实际要求设定每个宿舍违规次数。达到本次数。系统自动锁定&…

【LeetCode】快乐数

目录 一、题目二、解法完整代码 一、题目 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变…

Linux:Ubuntu18.04下开机自启动QT图形化界面

Linux&#xff1a;Ubuntu18.04下开机自启动QT图形化界面 Chapter1 Linux&#xff1a;Ubuntu18.04下开机自启动QT图形化界面一、创建rc.local文件二、建立rc-local.service文件三、启动服务查看启动状态四、重启 Chapter2 将QT应用作为开机自启动&#xff08;Linux系统&#xff…

代码能力弱,编程思维几乎没有,有些勉强能看懂,让自己敲,一脸懵逼?

最近有几个人问我&#xff0c;说自己代码能力弱&#xff0c;编程思维几乎也没有&#xff0c;简单的代码&#xff0c;勉强能看懂&#xff0c;让自己敲&#xff0c;就一脸懵逼&#xff0c;下一步该怎么学习&#xff1f; 10几年前&#xff0c;这些问题&#xff0c;就像是一道道难以…

Redis数据结构和持久化

数据类型 String&#xff1a;Map<String,String> 命令格式 set key value(相同的key会覆盖&#xff09; get key incr key decr key setex key seconds value seconds秒后失效 ttl key del key setnx ke value(if not exist) 应用场景 计数器 比如&#xff1a;访问次…

1招搞定maven打包空间不足问题

目录 一、工具应用问题 二 、使用效果 三、使用方法 四、练习手段 一、工具应用问题 使用maven的package功能打包失败&#xff0c;报错“Java heap space”错误。 二 、使用效果 修改IDEA中maven内存使用大小后&#xff0c;打包成功。 三、使用方法 点击菜单“File->Set…

C++ 例外处理 try throw catch

例外处理 程式中可能会发生的错误有三种&#xff0c;分别是语法错误(syntax error) 、执行期间错误(runtime error) 及语意错误(semantic error) &#xff0c;其中编译器会直接检查出语法错误&#xff0c;如果含有语法错误的程式无法过编译&#xff0c;例如 $ g u06.cpp u06.c…

【PythonRS】基于Python分块处理大型遥感影像的方法

RSer工作时不可避免会用到大型的遥感影像,由于分辨率过高、区域过大、波段信息过多等原因,都会导致数据非常的大。这个时候我们在进行一些简单的操作,如计算NDVI、二值化、分类等时,计算机的内存都会溢出。因此今天跟大家分享一下我平时分块的方法,中间如何计算就按照自己…

Docker 使用基础(3)—容器

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;秒針を噛む—ずっと真夜中でいいのに。 0:34━━━━━━️&#x1f49f;──────── 4:20 &#x1f504; ◀️ ⏸ …

let/const/var的区别及理解

在JavaScript中&#xff0c;let、const 和 var 是用来声明变量的关键字&#xff0c;但它们之间在作用域、变量提升、重复声明等方面存在区别&#xff0c;详细情况如下: 1. let、const、var 的区别 (1) 块级作用域 let 和 const&#xff1a;具有块级作用域&#xff0c;由 {} 包…

百数教学秘籍:三步走,轻松规划你的自动化计划任务

通过设定任务计划&#xff0c;用户可以轻松安排指定的功能插件或数据助手在特定时间自动执行&#xff0c;有效提高工作效率&#xff0c;还确保了数据的及时更新和处理。任务计划在应用启动时自动启动并在后台运行&#xff0c;无需用户持续监控&#xff0c;为用户带来极大的便利…

oracle哪些后台进程不能杀?

oracle 有很多的后台进程&#xff0c;在遇到特殊情况的时候如锁表&#xff0c;如果等待的是一个后台进程&#xff0c;那这时就需要考量是不是能杀掉这个后台进程&#xff1f;杀掉这个后台进程会不会引起实例崩溃&#xff1f;本着实践出真知&#xff0c;本文针对oracle 11g&…

游戏开黑语音-使用云服务器部署teamspeak服务(系统Ubuntu 20.04 LTS)

目录 前置物品服务器调整及部署1.重装系统2.换源3.下载teamspeak服务端并部署 连接服务器参考 前置物品 一台云服务器&#xff08;系统&#xff1a;Ubuntu 20.04 LTS) 服务器调整及部署 1.重装系统 在腾讯云官网的主机控制台内&#xff0c;选择重装系统 (由于之前为了快点和…

【刷题汇总 -- 最长回文子串、买卖股票的最好时机(一)、[NOIP2002 普及组] 过河卒】

C日常刷题积累 今日刷题汇总 - day0101、最长回文子串1.1、题目1.2、思路1.3、程序实现 2、买卖股票的最好时机(一)2.1、题目2.2、思路2.3、程序实现2.4、程序实现 -- 优化 3、[NOIP2002 普及组] 过河卒3.1、题目3.2、思路3.3、程序实现 -- dp 4、题目链接 今日刷题汇总 - day0…

Excel中用VBA实现Outlook发送当前工作簿

Excel中用VBA实现Outlook发送当前工作簿&#xff0c;首先按AltF11打开VBA编辑器&#xff0c;插入模块&#xff0c;并在工具-引用中勾选 Microseft Outlook .0 Object Library(其中为你Microseft Outlook的版本号。 Sub 发送邮件() 保存当前excel ThisWorkbook.Save让excel连接…

Linux 入门教程 by 程序员鱼皮

本文作者&#xff1a;程序员鱼皮 免费编程学习 - 编程导航网&#xff1a;https://www.code-nav.cn 大家好&#xff0c;我是鱼皮。 前两天我学编程的老弟小阿巴过生日&#xff0c;我问他想要什么礼物。 本来以为他会要什么游戏机、Q 币卡、鼠标键盘啥的&#xff0c;结果小阿巴…

模拟防止重复提交

gitee地址&#xff08;需要自取&#xff09;AopProxy重复提交: 防止重复提交 (gitee.com) RestController public class SubmissionController {Autowiredprivate SubmissionService submissionService;private static Jedis jedis new Jedis("localhost",6379);pr…

短视频矩阵:批量发布的秘密揭秘

在数字化时代&#xff0c;短视频已经成为一种广受欢迎的媒体形式。无论是用于品牌推广、产品营销还是个人创作&#xff0c;短视频都提供了一种直观、生动的方式来吸引观众的注意力。然而&#xff0c;有效地制作、管理和发布短视频对于许多创作者和企业来说是一个挑战。 为此&am…