初学c课程笔记整理4-->>函数

是什么?有什么用?用在什么地方?(理解)

养成良好的编程习惯;

培养编程思想;

写代码之前应该先分析需求,分析完需求再开始写代码;(写注释)

将人类的思维 --> 代码
 1. C语言程序是由函数组成

2. 什么是函数? 函数就是一段具备特定功能的程序段

定义函数的目的: 将一个功能封装以来方便复用

不使用函数的弊端:
     1.重复代码太多, 又臭又长

2.当需求变更, 很多地方都需要修改代码

使用函数的好处:
     1.提高了代码的复用性, 代码更简洁

2.当需求变更, 不用修改很多地方

1.函数的定义

函数的定义格式:
 返回值类型 函数名称(形参列表)
 {
    函数体; // 语句; ...

}

初学者如何定义函数:
 应该有4个确定:

1.确定函数名称(给函数起一个有意义的名称, 让调用者一看到名称就知道这个函数是干什么的)

1.1函数是标示符的一种

遵守规则 : 26个字母 , 数字 , _组成, 遵守规范: 驼峰命名

2.确定形参列表
    2.1形参列表的格式 (数据类型 变量名称, ...)
    2.2如何确定形参列表? 就看看以后调用函数时, 是否需要传递一些辅助的数据给函数
 3.确定返回值
 4.确定返回值类型

4.1return的是什么类型, 那么返回值类型就写什么类型

return的作用:

1.返回数据给函数调用者

2.结束函数

3.提前结束函数

2.函数的参数及返回值

1.形参列表中的每一个变量我们称之为, 形式参数, 简称形参

形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。

2.调用函数时传入的参数, 我们称之为实际参数, 简称实参

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

??3.形式参数、实际参数注意点:

调用函数时传递的实参个数必须和函数的形参个数必须保持一致

int max(int number1, int number2) //  形式参数

{

return number1 > number2 ? number1 : number2;

}

int main()

{

max(88); // 报错

return 0;

}

当使用基本数据类型(char、int、float等)作为实参时,实参和形参之间只是值传递,修改形参的值并不影响到实参函数可以没有形参

形参实参类型不一致, 会自动转换为形参类型

??4.返回值类型注意点

C语言是弱语言

函数可以没有返回值类型

如果没有写返回值类型,默认是int

??5.return使用注意

一个函数内部可以多次使用return语句,使用了return语句后,函数就会马上停止执行,return语句后面的代码就不再被执行

int max(int number1, int number2) //  形式参数

{

return number1 > number2 ? number1 : number2;

printf("执行不到"); // 执行不到

return 250; // 执行不到

}

函数返回值的类型和return实际返回的值类型应保持一致。如果两者不一致,则以返回值类型为准,自动进行类型转换

3.函数的注意点??

1.如果"基本数据类型"(char int double float)作为函数的参数, 在函数中修改形参的值, 不会影响到外面实参的值

2.实参的个数, 必须和形参的个数相同

注意: 在函数中修改形参的值, 不会影响到外面实参的值(当然也有一定的前提)

3.返回值可以和返回值类型不一样,但是如果返回值和返回值类型不一样的时候

系统会对返回值进行自动类型转换(隐式类型转换), 将返回值转换为返回值类型

注意: 在企业级开发中千万不要这样写

4.函数可以有形参也可以没有形参

5.函数可以有返回值, 也可以没有返回值

如果函数没有返回值, 那么返回值类型就写viod

如果函数没饭返回值, 那么可以不写return, 但是如果写了return也不会报错

6.函数名称不能相同

形参列表不同也不可以

返回值类型不同也不可以

7.函数不能嵌套定义

3.函数的声明

函数的声明

在C语言中,函数的定义顺序是有讲究的:默认情况下,只有后面定义的函数才可以调用前面定义过的函数

如果想把函数的定义写在main函数后面,而且main函数能正常调用这些函数,那就必须在main函数的前面进行函数的声明

函数的声明格式:

返回值类型 被调函数名( 类型 形参, 类型 形参... );

返回值类型 被调函数名( 类型, 类型...);

函数的声明与实现的关系

?? 注意点:

如果被调函数的返回值是整型时,可以不对被调函数作说明,而直接调用。这时系统将自动对被调函数返回值按整型处理

 

4.函数的调用

 

1.函数的调用

函数调用的一般形式为

函数名(实际参数表);

对无参函数调用时则无实际参数表。

实际参数表中的参数可以是常数,变量或其它构造类型数据及表达式。

多个参数各实参之间用逗号分隔。

函数表达式

函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数 是有返回值的

函数语句

函数调用的一般形式加上分号即构成函数语句。

函数实参

函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因 此要求该函数必须是有返回值的。

2. 函数的嵌套调用

- C语言中不允许作嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。但是C语言允许在一个函数的定义中出现对另一个函数的调用。这样就出现了函数的嵌套调用。即在被调函数中又调用其它函数。这与其它语言的子程序嵌套的情形是类似的。其关系可表

main 函数

main是函数的名称, 是系统规定的名称, 系统启动程序就会调用名称叫做main的函数

main函数只能由系统调用 ,不能手动调用

int main(int argc, const char * argv[]){}

其实系统在启动程序的时候, 会给我们的程序传递一些参数

argc : 就是系统传递进来的参数个数, 默认是1

argv : 就是系统传递进来的参数实际的值, 默认是程序的名称

递归函数

1.递归函数概述及用法

一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允许函数 的递归调用。在递归调用中,主调函数又是被调函数。执行递归函数将反复调用其自身,每调用 一次就进入新的一层

2.递归函数构成条件

自己调用自己

存在一个条件能够让递归结束

问题的规模能够缩小

??3.递归函数注意点

一般情况下, 能用循环做得事情, 用递归函数都能做

但是要注意: 不是什么时候都使用递归, 递归要慎用(性能问题)

什么是递归函数: 函数自己搞自己, 性能差

注意: 递归一定要由一个明确的结束条件, 否则会造成死循环(无限循环)

多文件开发

 

1.为了模块化开发,一般会将不同的功能写到不同的.c源文件中,这样的话,每个开发人员都负责修改不同的源文件,达到分工合作的目的,能够大大提高开发效率。也就是说,一个正常的C语言项目是由多个.c源文件构成。

2. 所谓模块化编程(多文件开发),就是多文件(.c文件)编程,一个 .c 文件和一个 .h 文 件可以被称为一个模块

通过头文件来调用库功能。

在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即

可。用户只需要按照头文件中的接口声明来调用库功 能,而不必关心接口怎么实现的。

多文件编译。

将稍大的项目分成几个文件实现,通过头文件将其他文件的函数声明引入到当前文件。

头文件能加强类型安全检查。

如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,

这一简单的规则能大大减轻程序员调试、改错的负担

??多文件开发的注意事项

- 1)头文件中可以和C程序一样引用其它头文件,可以写预处理块,但不要写具体的语句。

- 2)可以声明么函数, 当不可以定义函数

- 3)可以声明常量, 当不可以定义变量

- 4)可以“定义”一个宏函数。注意:宏函数很象函数,但却不是函数。其实还是一个申明。

- 5)结构的定义、自定义数据类型一般也放在头文件中。

- 6)多文件编程时,只能有一个文件包含 main() 函数,因为一个工程只能有一个入口函数。我们 把包含 main() 函数的文件称为主文件。

- 7)为了更好的组织各个文件,一般情况下一个 .c 文件对应一个 .h 文件,并且文件名要相同, 例如 fun.c 和 fun.h。

- 8)头文件要遵守幂等性原则,即可以多次包含相同的头文件,但效果与只包含一次相同。

- 9)防止重复包含的措施

时间: 2024-10-26 05:30:48

初学c课程笔记整理4-->>函数的相关文章

初学c课程笔记整理1

是什么?有什么用?用在什么地方?(理解) 养成良好的编程习惯; 培养编程思想: 写代码之前应该先分析需求,分析完需求再开始写代码(写注释): 1.关键字(系统定义) 被C语言赋予了特殊含义的单词, > 关键字特征:全部都是小写 > 关键字在开发工具中会显示特殊颜色 > 编译器严格区分大小写 >?注意: 关键字不能用作变量名.函数名等 - C语言中一共有32个关键字 auto double int struct break else long switch +  case enum 

初学c课程笔记整理2

是什么?有什么用?用在什么地方?(理解) 养成良好的编程习惯; 培养编程思想: 写代码之前应该先分析需求,分析完需求再开始写代码:(写注释) 1.运算符 运算符是告诉编译程序执行特定算术或逻辑操作的符号. 运算符分类: 按照功能划分: 算术运算符 关系运算符与逻辑运算符 按位运算符 运算符根据参与运算的操作数的个数分为 : 单目.双目.三目预算符. 优先级:     (圆括号)优先 !(非) // 注意 ↑ 算术运算符 +.-.*./.% ↑ 关系运算符   >.<.<=.>=.=

初学c课程笔记整理7--&gt;&gt;二维数组、字符串、指针

是什么?有什么用?用在什么地方?(理解) 养成良好的编程习惯; 培养编程思想: 写代码之前应该先分析需求,分析完需求再开始写代码:(写注释)   1.二维数组 1.1 二维数组的基本概念: 所谓多维数组就是一个一维数组的每个元素又被声明为一 维数组,从而构成二维数组. 可以说二维数组是特殊的一维数组. 示例 int a[2][3] 可以看作由一维数组a[0]和一维数组a[1]组成,这两个一维数组都包含了3个int类型的元素 1.2 二维数组的定义: 数组中的每一个元素又是一个数组, 那么这个数组

初学c课程笔记整理5--&gt;&gt;进制(+位运算符变量)及一些补充

是什么?有什么用?用在什么地方?(理解) 养成良好的编程习惯; 培养编程思想: 写代码之前应该先分析需求,分析完需求再开始写代码:(写注释) 1.进制 1.1进制的概念 是一种计数的方式,数值的表现形式 1.2常见的进制 十进制.二进制.八进制.十六进制 1.3进制的进位方法 十进制 0.1.2.3.4.5.6.7.8.9 逢十进一 二进制 0.1 逢二进一 书写形式:需要以0b或者0B开头,比如0b101 八进制 0.1.2.3.4.5.6.7 逢八进一 书写形式:在前面加个0,比如045 十

javascript学习笔记整理(函数)

javascript函数的声明和调用将完成某一特定功能的代码集合起来,可以重复使用的代码块. 一.函数的声明方式(创建) A.基本语法(function  关键字)function 函数名([参数1],[参数2]....){    函数体    [retrun]  //返回值} function a(){ alert(1) }; B.字面量定义的形式(匿名函数)var 变量=function ([参数1],[参数2]....){    函数体    [retrun]  //返回值} var a=

《非职权影响力》课程笔记整理

平伪寰鹎 仂顺柢 蹲财曹 ╅ゼ摊 榇漕剥抄 俜镶虼裤 噻灶ㄍ抹 兕镘 蛳蓟荡抓 蝣羿烘 不过当关上房门的那刻袁晓彤的脸色顿时就变了背靠着房 氕深蜕 菖纽碉饭 辘鲇诿 气掮︵慕 牛粳濮迥 惟诗冻建 出现了几个配方其中一项便是亡灵 绥馄噔耘 榫件谲箪 幄婆 üЕ屦馒 蠃基鹄哧 阃羡闽ぅ 焓谬奘翊 缀谨泉蕨 潞鹇牢 阄旅址机 烀銮隰φ э盐篓旨 频鄙炉篾 屺墁直 屈钥修 髋何嵝挺 政槭等 祝龙骨壮阳大补散隆重上市台上溜儿放着几 榴 孰删冬魍 劢祠 加入血饮盟无异于

(1/18)重学Standford_iOS7开发_iOS概述_课程笔记

写在前面:上次学习课程对iOS还是一知半解,由于缺乏实践,看公开课的视频有时不能很好地领会知识.带着问题去学习永远是最好的方法,接触一段时间iOS开发以后再来看斯坦福iOS公开课,又会有许多新的发现,对于已有的概念有了新的认识.这次课程笔记主要用作归纳知识点,整理学习思路,与大家讨论课后习题,交流等. 第一课:iOS概述 1.iOS分层:①Core OS:核心操作系统层,基于UNIX内核(套接字,文件系统,电源管理,钥匙串,Bonjour等).API多为C函数,实际应用使用较少. ②Core S

Deep Learning(深度学习)学习笔记整理系列七

Deep Learning(深度学习)学习笔记整理系列 声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明也参考原文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除. 3)本人才疏学浅,整理总结的时候难免出错,还望各位前辈不吝指正,谢谢. 4)阅读本文需要机器学习.计算机视觉.神经网络等等基础(如果没有也没关系了,没

Deep Learning(深度学习)学习笔记整理系列之(三)

Deep Learning(深度学习)学习笔记整理系列 [email protected] http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04-08 声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明也参考原文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主