函数的介绍

自话函数

函数这一概念,之前在数学中是最常见的。但不要忘记最初设计计算的前辈都是一些数学大家。所以函数这一概念自然也被引入到了计算机中。
数学中函数表示的一种映射关系(集合A到集合B之间的关系),而到了计算机中这一概念被延伸。
计算机中函数由 返回值、函数名、形参列表 以及 函数体 4 部分组成。
int main(int argc, char const *arg[]) { ... }
int 表示返回值类型; main 代表着函数名; (int argc, char const *arg[]) 表示的是形参列表; { ... } 表示的是函数体。

  • 函数名,很容易理解,就是给函数起名字。
  • 返回值类型 和 形参列表 都与数据类型有关,都可以是任意数据类型,包括空类型。
  • 函数体编写语句的地方。省略号代表任意的语句。

我们说计算机中的函数和数学中的函数是有关联的,比如 我要计算两个数的加法 x+y(其中 x 和 y 表示任意实数)。数学中可以表示为 f(x) = x + y(x,y属于R);
而要在计算机中表示两个数的加法,除了直接编写 z = x + y,我们还可以使用函数。

int summation(x, y) { x + y }

由此数学和计算机中的联系就建立起来了。但我们知道计算机不单单可以用于数值计算,现代计算机的功能已经十分强大。函数这一概念也随着计算机的发展,较之数学中的函数也已发生了翻天覆地的变化。

函数介绍

函数的概念

函数是计算机程序中非常重要的一个概念。也是程序的最小组成单元
::因为函数是组成程序的最小单元,所以编写程序就离不开函数。我们可以将任意的操作编写到一个函数中,在任意想要实现某一操作的地方,我们都可以看看是否有对应的函数可供使用,这也极大简化了我们的编程开发工作。所以编程请欣然接收 CV(Ctrl c、v) 工作,但也不要过度依赖 CV。根据自己的职业发展选择适合自己的编程习惯。
::因为函数已经是程序的最小组成单元,所以函数内禁止再定义函数。

函数的作用

通过函数概念的介绍,我么可以发现,函数的主要作用无非就两点:

  • 函数的主要作用是实现了对过程的封装和对细节的隐藏(只需关注函数功能,不必关注他函数体语句是怎么写的,我可以写成 x+y,也可以写成y+x)。
  • 函数化编程提高了代码的复用性(一个函数多地调用)
    ::我们常说模块化编程。模块化编程和函数化编程一样都是封装一些操作。但是函数话编程封装的是一些语句(函数体),而模块化编程是将多个函数视为一个Module。

函数的组成

函数由 返回值、函数名、形参 以及 函数体,四大部分组成。
其中 函数名 表示的是函数的名字,函数体 是这个函数实现了哪些功能。形参列表是传递给这个函数的数据,比如我要计算 1+2 我要把 1 和 2 传给这个函数,我要计算 3+4 我要把 3 和4 传给这个函数。其他的像 求一句话的长度,那我需要将这句话传给函数,在函数内我就要采用一定的方法计算得到这句话的长度,有多个字,占用计算机多少内存…,当我计算完以后,把结果发送出去,这个结果就是返回值。那我要是不想要这个结果,就为了玩,我完全可以什么都不返回。什么都不返回,就是空类型 void。

函数名

函数名就是给函数起名字。除了函数名以外还有像变量名、类名这些都是在为某个类型起名字。如果所在公司有自己的的命名规则,严格遵守。若没有一般采用变量的命名规则。

变量的命名规则:
1. 变量名由数字、字母、下划线(_)组成。但不能以数字开头。且以下划线开头的一般有特殊含义或为系统使用。
2. 变量名中的字母区分大小写。比如 a 和 A 是不同的变量名,num 和 Num 也是不同的变量名
3. 禁止以关键字作为变量名。
4. 变量的命名要尽可能做到 见名知意。好的命名真的可以为编程增添不少亮色。
5. 如有必要需添加注释。

::关键字参考 https://en.cppreference.com/w/c/keyword

返回值类型、形参列表

返回值表示的函数执行完成之后得到的结果是什么。
形参列表则是函数在运算过程中需要的原料。
返回值类型 和 形参列表 都可以是任意的数据类型,包括空类型。
空类型就是什么也没有。如果返回值为空,表示什么也不返回。如果形参列表为空,表示没有形参。
参数列表中的参数,一般采用 类型名 参数名 多个参数以逗号分隔,最后一个参数后不加逗号的形式书写。
参数列表还涉及到一个非常重要的知识点:变量的生命周期

变量的生命周期

大括号( {} )表示边界,这个边界可以是函数的边界、分支/循环语句的边界、代码块的边界、类的边界。
边界之内皆为我有,边界之外我无权干涉。所以变量的生命周期立显:一个变量只归属于它所在的结构内。
当函数调用完成之后函数被销毁,归属于该函数的所有变量也随之销毁。
::改变变量生命周期的方法有,静态变量、全局变量、地址传递等

改变变量生命周期的方法

先不给出,有了数据类型的概念之后再写。

函数体

函数体内主要是函数功能的实现。比如数学计算;再比如我定义了一个吃饭的函数,那函数体内我就可以写 拿起筷子、夹菜 等动作。
函数体和返回值也是有联系的,这个联系就是 return语句。

return语句

return语句 后面的内容表示返回值。比如return 0; 返回的是一个数字 0;return star_value_1; 返回的就是 star_value_1 的值。

  • return ; 或者不写 return语句 表示返回的是一个空类型。

简述main函数

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

int main(int argc, char const *argv[]) {
//这里的 int 表示返回值类型,main 表示函数名
//int argc, char const *argv[] 是参数列表。其中 int,char* 表示的都是参数类型;argc、argv表示的是参数名 
    res = summation(1, 2);
    //summation表明刚刚进行了一次加法运算
    //注意这里可不是函数中定义函数

    return 0;
    //返回值语句,返回了一个数字 0.
}
//函数的边界,到这里函数执行完成,要将函数的相关内容销毁。
  • main函数是系统中及其特殊的一个函数,它标识着程序的入口,一般可以了理解成程序是从 main 函数开始执行的。
  • 因为main函数标识了程序执行的入口,所以一个工程中 main函数 有且仅有一个
    (工程:非独立文件,多个文件之间相互配合最终生成想要的程序或内容)
    (有且仅有一个,必须要有,且只能有一个。这一个一定是main,如果见到的不是main,那它一定包含着main)。
  • main函数有参数,有返回值。它的参数和返回值涉及到程序的执行,解释如下:
    程序本质上还是一段代码。但这段代码是由操作系统调用执行的。根据谁调用,谁处理的原则,main函数的返回值(也就是程序的返回值)应返回给操作系统。
    既然操作系统负责调用程序,那么如果要给程序传入参数,也应该是在程序的调用阶段进行。
    程序的调用,windows以及Linux下都是在终端中输入程序名。所以main函数的参数就是在终端中输入程序名后跟着的内容exe_name parameter
    TODO:这里为程序调用时的参数展示一张图片

函数的使用

我们知道函数是程序的最小组成。函数中不能再定义函数。但是上边的代码段,明明是在 main 函数中使用了 summation函数呀。
这里就涉及到了函数的声明、定义、调用。

函数的声明、定义 及 调用

函数的声明,告知编译器有这么一个函数。并向编译器阐述了函数叫什么,参数是什么以及返回值类型是什么。但是该函数是不是真的存在,无关紧要。
函数的定义,这个函数做了什么事
函数的调用,使用函数。调用处处理函数的返回值。
注意,函数的声明只是告诉编译器有这么一个函数,函数的功能在声明阶段重要不重要呀?不重要。也就是说,函数的声明其实只需要三部分 返回值类型、函数名 以及 形参列表。而函数的定义着重于函数做了什么事这时候 函数体 就成了重点关注对象。

//函数的声明
int summation(int x, int y);

//函数的定义
int summation(int x, int y) { 
    return x + y;
}

但是这样写是不是很麻烦呀。可不可以简化一下这个写法呢?还真可以。不难看出函数的定义中就包含着函数的声明,所以我们可以省略函数的声明写成main函数中的代码格式。
但这样写是不是必要的呢?某种情况下是的。
C/C++中 函数/变量 都遵循先声明后使用的原则。也就是说一个变量/函数我没有声明过它的存在我就不能使用。来看下面一段代码

//int summation(int x, int y);
int main(int argc, char const *argv[]) {
    res = summation(1, 2);
    return 0;
}

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

在这段代码中,main函数中使用了summation函数。根据先声明后使用的原则,如果我没有声明过summation,那么我就不能使用(即使用了也会报错)。因此我就必须在main函数之前先声明一下summation函数。
::声明只是说有这个函数,而函数的定义则决定了函数的存在。定义是包含了一种强有力的声明的,但这并不是说声明一无是处。通常我们将声明放在头文件(.h)中,而将定义放在源文件(.cpp)文件中。

关于调用的两个知识点

  1. 形参与实参
  • 函数声明处参数列表里的参数叫做形参。
  • 函数调用处参数列表里的参数叫做实参。
  • 形参和实参相对应。
    形参和实参相对应,这个对应不单单是说形参和实参的个数,还代表着每个位置形参和实参的类型也要对应。
    特别地,当形参有默认值时,因为实参会替换形参的默认值,所以此时一定要格外注意参数个数。
int func(dt var1, dt var2 = value, dt var3 = value, dt var4);

func(value1, value2, value3, value4);

func(value1, value2); //这种写法就不对了,因为实参会替换形参的默认值。所以这里给出的实参只能对应两个形参。
  1. 函数的嵌套调用和链式访问
    函数之间是平等的因此函数中不能再定义函数。但是函数中可以调用函数(包括该函数自己)。
    链式访问:将一个函数的返回值作为另外一个函数的参数。
    ::如果不接收(处理)函数的返回值,嵌套调用。如果接收了函数的返回值,链式访问。

函数的分类

按照函数来源函数可以分为:库函数、自定义函数。
常见的库函数又可以分为:IO函数、字符串操作函数、字符操作函数、内存操作函数、时间/日期操作函数、数学函数、
进程函数、数据库函数等等。
常见的函数类型有:库函数、自定义函数、递归函数、回调函数、构造与析构函数、内联函数、虚函数

  • 分类这一块知道有这么个名字就好。熟悉的几个函数像什么 构造函数、重载函数、虚函数 有个记忆之后,你遇到就知道它是什么函数。

函数总结

在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL数据库提供了丰富的函数,包括聚合函数、日期和字符串处理函数等。这些函数可以在SELECT语句和条件表达式中使用,帮助用户方便地处理表中的数据,使MySQL数据库的功能更强大。一些常用的函数包括: 1. 聚合函数:用于计算数据的总和、平均值、最大值、最小值等。例如SUM、AVG、MAX、MIN等。 2. 日期函数:用于处理日期和时间数据。例如NOW、DATE、DATE_FORMAT等。 3. 字符串处理函数:用于处理字符串数据。例如CONCAT、SUBSTRING、LENGTH、REPLACE等。 4. 其他函数:还包括转换函数(如CAST)、大小写转换函数(如LOWER和UPPER)、位置函数(如LOCATE和INSTR)、四舍五入函数(如ROUND)、类型转换函数(如TO_DAYS)等。 以上是一些常用的MySQL函数,还有其他函数可用于不同的数据处理需求。可以根据具体的需求选择合适的函数来操作和处理数据。123 #### 引用[.reference_title] - *1* *3* [MySQL常用函数介绍](https://blog.csdn.net/wangkun_j/article/details/102741699)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *2* [mysql中常用函数详解](https://blog.csdn.net/Sinlee_bk/article/details/120685582)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fstarSea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值