导图社区 第七章函数——C的编成模块
C 自学笔记 第七章函数——C的编成模块,内容有: 1. 复习函数的基本知识 2. 函数参数和按值传递 3. 函数和数组 4. 函数和二维数组 5. 函数和C风格字符串 6. 函数与结构 7. 函数和string对象 8. 函数和array对象 9. 递归 10. 函数指针
药理学 第十章肾上腺素受体激动药 主要药物的机理、作用,希望这份脑图对你有帮助。
药理学 第九章胆碱受体阻断药——N胆碱受体阻断药 主要药物的机理、作用,希望这份脑图对你有帮助。
药理学 第八章胆碱受体阻断药——M胆碱受体阻断药 主要药物的机理、作用,希望这份脑图对你有帮助。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
第七章 函数——C++的编成模块
1. 复习函数的基本知识
1. 性质
1. 提供函数定义
2. 提供函数原型
1. 为什么需要原型
1||| 原型描述了函数到编译器的接口
2||| 它将函数返回值类型以及参数的类型和数量告诉编译器
2. 原型的语法
可以将函数定义加上 ; 来编成声明语句
可以省略变量名,也可以不省略
3. 原型的功能
书P171
静态类型转换
3. 调用函数
2. 函数参数和按值传递
1. 函数的性质
1. 形参与实参
1. 形参
1. 接收传递值的变量
如 a
也可叫参量
2. 实参
1. 传递给函数的值
如 i
也可叫参数
2. 函数中声明的变量(包括参数)是函数所私有的,称为局部变量
3. 注意 函数为按值传递,函数内值的变化不会影响函数外值的变换,即函数会创建副本
2. 多个参数
1. 使用逗号符分开多个参数即可
注意类型需要分别定义,相同类型也不能省略
3. 另外一个接受两个参数的函数
1. 形参与局部变量的区别
形参是从调用函数时传入的值来获得自己的值
局部变量是从函数中获得自己的值
3. 函数和数组
函数按指针传递,将直接使用原数组
1. 声明含数组为参数的函数
1. 函数头为 int sum_arr ( int arr[ ] , int n)
2. 也可看作 int sum_arr ( int* arr , int n)
2. 如何用指针来处理数组
1. 注意在这里 arr实际上不是数组,而是指针——数组表示法
1. 可以sizeof
返回的是该类型的数据所占位数
数组的sizeof 则是整个数组所占的位数
表示指针并没有指出数组的长度,需要加上个数的参数
2. 当且仅当在函数头或函数原型中 , int arr [ ], 与int* arr 意义相同
1. 都表示arr是一个int指针
3. 将数组作为参数意味着什么
1. int sum_arr ( int arr[ ] , int n)
2. 在这里 函数调用将数组的 第一个元素的地址 和 数组中的元素个数 传递给函数
函数将地址赋予给arr,将元素个数赋予给n
3. 这意味着并没有 传递数组内容给函数 , 而仅仅只是将数组的地址,包含的元素种类(类型),以及元素的数目传递给函数
4. 不同点
1. 在传递常规变量时,函数将使用变量的拷贝
2. 而传递数组时,使用的原来的数组
4. 更多数组函数示例P178
1. 填充数组
int fill_array (double ar[ ] , int limit )
2. 显示数组及用const保护数组
void show_array (const double ar[ ] ,int n)
使用const 防止数组内容被更改
3. 修改数组
void revalue( double r ,double ar [ ] , int n )
5. 使用数组区间的函数
第一个参数(指针)指向的是数组的开头
第二个参数(指针)指向的是数组的结尾
2. 图
const代表的意思是指针不会改变数组内的值
6. 指针和const
书183
1. 基本类型
const int* pt
1. 不能更改指向的内容的值
int* const pt
1. 不能更改指向的内容,即不能指向其他地址
const int* const pt
1. 不能更改指向的内容的值,也不能指向其他地址
2. 性质
1. 不能将const的值赋值给非const类型的指针
2. 多级关系
一级关系
指向指针的指针可以将非const指针赋值给const指针
二级关系
不能做以上操作
3. 尽量使用const
避免由于无意间修改数据导致的编程错误
限制const指针和非const指针,非const指针只能接受非const参数
4. 函数和二维数组
1. 原型为
int sum ( int (*ar2) [4] , int size)
即指向数组的指针
若为 int* ar2 [4] , int size
为指向int的指针数组
itn sum ( int ar2 [ ] [4] , int size)
2. 可以看出在原型声明时,已经指定了列数,即每个子数组所含的元素个数
即只能接受列数为4的数组
5. 函数和C风格字符串
1. C风格字符串
由一系列字符组成,以空字符结尾
即含内置的结束字符 \0
不含结束字符\0 的char数组不是字符串,只是数组
2. 种类
1. char数组
2. 用括号引起的字符串常量
3. 被设置为字符串地址的char指针
4. 不过以上类型都属于char*类型
2. 将C字符串作为参数的函数
1. 实际上传输的是字符串第一个字符的地址
2. 命名:在这里注意数组表示法和指针表示法
1. 实际上传输的是地址
2. *str
1. 表示的是第一个字符
3. str++
1. 表示的是将指针增加一个字符
3. 返回C风格字符串的函数
1. 实际上传输回来的是字符串的地址
效率更高
6. 函数与结构
1. 与数组不同,结构将其数据整合成单个实体或数据对象,该对象被视为一个整体
2. 函数将使用的是结构的副本,同时也可按值传回结构
1. 传递整个数组消耗大量时间
2. 传递地址(和数组一样)将节省大量时间
3. 同时注意结构的地址需要结构名加&
2. 传递和返回结构
1. 先展示传递整个结构内容
3. 另一个处理结构的函数示例
1. 可以返回结构类型,结构内容不同 或 结构不同的结构
2. 无展示
4. 传递结构的地址
1. 后展示传递结构数组的地址
1. 调用函数时,将结构的地址(&pplace)传递给函数,而不是结构本身
2. 形参声明为指向结构的指针,若不想修改数据,则使用const
3. 因形参是指针而不是结构,则应该使用间接成员运算符(->),不使用 .
7. 函数和string对象
1. 相对于数组来说,string的使用更与结构相似
3. 使用
可使用副本
也可使用地址
8. 函数和array对象
1. 按值传递
1. 处理的是原始对象的副本
2. 传递指向对象的指针
1. 处理原始对象(原始数据)
9. 递归
1. 函数可以自己调用自己
2. 通常放在if语句中
2. 含一个递归调用的递归
过程
if为ture
每个函数将执行statement 1 ,而后继续调用函数,直至为false
if为false
经过一定次数的调用一定后,将从最后一次的statement 2 处开始执行,并逐渐返回至第一次调用
注意在调用过程中,相同层级的变量的地址是相同的
3. 含多个递归调用的递归
图
10. 函数指针
1. 有助于通过函数通过函数地址作为函数的参数来直接调用函数
2. 过程
1. 获取函数的地址
1. 与数组一样,使用函数名即可
注意区分参数是函数还是函数的返回值
2. 声明函数指针
1. 指定函数的指针类型
2. 通常要使用指向特定类型的函数的指针时,应先编写该函数的原型,再用(*pt)替换函数名,这样,pt指向的就是这类函数的指针
3. 使用函数指针调用函数
3. 函数指针示例
注意,这里被引用的函数的参数标志,和要引用函数的函数的参数标志需要相同(如果没有采用强制类型转换)
4. 深入探讨函数指针
书202
省略
5. 使用typefdef进行简化
创建别名