IOS学习第8天
函数
- 使用函数时注意的细节
* 1.什么时候用函数 *
当有一段代码需要重用的时候,那么可以将这些代码封装到一个函数中
什么时候想要执行代码,什么时候调用即可
* 2.使用函数的好处:*
1)减少代码冗余
2)修改维护炒鸡方便
3)屏蔽代码的实现,我们只需要知道函数的功能,而不需要关心怎么实现
- 局部变量和全局变量的异同点
1.变量:在内存中用来存储数据开辟的那块空间
局部变量:
定义在函数或者代码块内部的变量
全局变量:
定义在所有函数和代码块外部的变量
2.全局变量和局部变量的异同点
1)相同点
都是内存中的若干个字节,用来存储数据用的
2)不同点
1>定义的位置不同
2>作用域不同
局部变量:只在定义局部变量的代码中有效
全局变量:从全局变量定义的那一行开始,往下都有效
3>默认值不同
局部变量:如果没有赋初值,那么系统会给他一个垃圾值
全局变量:一般来说,全局变量如果没有赋值,那么他的值是零 char类型的初值为'\0';
4>生命周期不同(创建和回收时间不同)
局部变量:只有CPU执行到该行代码的时候才会被创建,代码块或者函数执行完了就会被回收
全局变量:只要程序已启动,那么全局变量就会被创建,整个程序停止了,全局变量才会被回收
* 当一个变量需要被所有函数访问的时候,要使用全局变量 *
函数的参数
函数什么时候需要参数
当某个函数要完成一个特定功能 ,但是需要一些其他数据的时候
比如 一个函数 他的功能是判断一个整数 是否是偶数 但是被调函数并不知道这个数是多少
主调函数知道,只有通过函数的参数传递给被调函数
函数参数的本质:定义在函数内部的局部变量
- 参数可以实现的效果
1.参数的最大的作用:把主调函数中的数据 传递给被调函数
2.实际参数可是常量 也可以是变量,还可以是表达式
3.实参 传递数据给 形参的过程 是一个赋值的过程 (copy的过程)
结论:在函数内部 是不能通过传递进来的变量 来改变主调函数中变量的值
- 什么时候需要带参数
函数:完成特定功能的代码块
当一个函数要完成一个特定功能时 发现需要一个数据 但是函数内部 并不知道这个数是多少时候
需要主调函数传递过来,那么这时候这个被调函数就需要有一个参数,接收主调函数传递过来的数据
```
调用函数的过程中,实参给形参的赋值过程如果实参的类型和形参不同会怎么样?
实参和形参的类型 是可以不一样的
如果类型不一样 会出现隐式转换, 会把实参 转成形参类型的
“`
return关键字
return关键字使用在函数体之中的
它的作用:在函数体中的return关键字 表示 "立即结束"这个函数的执行
所以说 return的作用就是 "提前结束这个函数"
```
###使用带返回值的函数需要注意的细节
1.函数的返回值类型 代表 有这么一个类型的数据返回给调用者
这个时候调用者 才能知道用什么数据类型的变量来接收
2.void 表示 函数执行完之后 没有任何数据来返回给调用者,调用者也不需要接收
3.一旦函数指定了返回值类型,那么就必须在函数结束前返回一个对应类型的数据
4.一旦函数定义了返回值,那么你一定要保证 每一个分支 结束之前必须有返回值
Control may reach end of non-void function
表达你的函数 可能在某种情况下没有返回值
5.return 的使用,不管是在 有返回值 还是没有返回值的函数中,都表示”结束”这个函数
在无返回值的函数中,直接用 也可以不用
在有返回值的函数中,必须使用 return 数据
“`
函数的声明和定义
- 注意点
1>不要把声明函数的语句写在调用语句的后面
2>函数的声明不一定非要写在所有函数的外面,只要写在你调用之前就可以
3>当被调函数定义在主调函数之前,此时可以不声明函数
被调函数—>被调用的函数—->addNum1andNum2
主调函数—>调用函数的函数—>main函数
4>函数声明的返回值和参数的类型,和函数定义的时候的返回值和参数的类型必须一致(规范)
5>函数声明的时候参数的名字可以不写,但是定义的时候必须写–>最好都写上
6>当函数的返回值是int,可以不声明—>不要这样做