day08 函数
什么是函数 :函数就是一段特殊功能的代码
函数 定义 的语法
- 函数必须写在main函数的外面
- 格式
eg:
数据类型 函数名称(参数列表) { 函数体; } eg: void showLogo() { printf("这里面的叫函数体"); }
函数调用的语法
showLogo(); 这个写在main函数里面 就可以调用函数
函数的使用
* 什么时候使用函数
* 当有一段代码需要重用的时候 那么可以将这些代码封装到一个函数中什么时候想要用的时候,什么时候就可以直接调用
* 使用函数的好处
* 减少代码的冗余
* 修改维护方便
* 屏蔽代码的现实,我们只需要知道函数的功能,而不需要关心怎么实现
局部变量和全局变量的异同点
- 变量: 在内存中用来存储数据开辟的那块空间
- 局部变量: 定义在函数或者代码块内部的变量
- 全局变量: 定义在所有函数和代码块外部的变量
- 全局变量和局部变量的异同点
- 相同点
- 都是内存中的若干干字节,用来存储数据的
- 不同点
- 定义的位置不同
- 作用域不同(有效范围)
- 局部变量 : 在定义局部比那辆的代码块中有效
- 全局变量 : 从全局变量定一的那一行来时直到程序结束
- 声明周期不同
- 局部变量:
- 只有CPU执行到该行代码的时候 才会被创建 代码块或者函数执行完毕后就会回收
- 全局变量 :
- 只要程序一启动 那么全局变量就会被创建整个程序停止之后 全局变量才会被回收
- 局部变量:
- 默认值不相同
- 局部变量: 如果没有赋值,那么系统会给他一个垃圾值
- 全局变量: 一般来说 全局变量 如果没有赋值 那么他的值 是 0
- 不同类型的初始值问题
- 相同点
类型 | 初始值 |
---|---|
int | 0 |
float | 0.0f |
double | 0.0 |
char | ‘\0’ |
小练习
思考:如何计算一个函数在程序中调用了多少次
int count = 0;//这里可以定义count 用来记录函数执行的次数
void test()
{
// int count = 0;
//此处定义count不能在这,因为在这里定义的count是局部变量,函数执行完了之后会被回收
count++:
printf("test函数被调用了!\n");
}
int main()
{
for (int i = 0; i < 5; i++) {
test();
}
int num = 0;
printf("请输入一个数:\n");
scanf("%d",&num);
if(num % 2 == 0){
test();
}
}
什么时候使用全局变量
函数需要被所有函数访问的时候
* 主调函数与被调函数*
main函数调用者: 是系统自动调用的,而且我们程序员不能主动调用 main函数中 调用了A();函数,而在A函数中又调用了B函数 那么A函数的调用者 是A函数 北调用的函数 我们成为:被调函数 调用别的函数的函数 我们称为:主调函数
函数什么时候需要参数
当某个函数完成一个特定的功能,但是需要一些奇特数据的时候 比如: 一个函数 他的功能 是判断一个整数 是否是偶数但是北调函数并不知道这个数 主调函数直到,只有通过函数的参数传递给北调函数
形参和实参
- 形参 :声明在函数定义中的小括弧里面的参数
- 实参: 调用函数的时候的传递的值
void printOneNumber(int num){//这里的num就是形式参数
printf("num = %d\n",num);
}
int main()
{
printOneNumber(50);//这里的50就是实际参数
}
"注意
实际参数的类型 一定 要和 形式参数的类型保持一致
如何定义一个带参数的函数
函数类型 函数名称(数据类型 变量名) { // 函数体; } 调用函数: 函数名称(实际参数的值; 实际参数的类型 一定要和 形式参数保持一致
函数调用执行步骤
- 加载函数
- 如果函数有参数,声明函数的参数(在内存中开辟空间)
- 将参数的值 copy给形参
- 执行函数的函数体
- 函数体执行完毕之后 回到驻地啊函数 接着向下执行
* 参数可以实现的效果*
- 参数的最大值的作用:
- 把主调函数中的数据传递给被调函数
- 实际参数可以使是常量 也可以是变量,还可以是表达式
- 实参 传递数据给形参的过程是一个赋值的过程(copy的过程)
- 结论: 在函数内部 是不能通过传递进来的变量 来改变主掉函数中变量的值
- 参数的最大值的作用:
函数什么时候需要带参数
函数:完成特定功能的代码块 当一个函数要完成一个特定功能时 发现需要一个数据 但是函数内部 并不知道这个数是多少的时候需要主调函数传递过来 那么这时候这个被调函数就需要有一个参数, 接收主调函数传递过来的数据
return关键字
**return关键字使用在函数题之中
- 它的作用:
*在函数体中的return关键字 表示”立即结束“这个函数的执行,
所以说return的作用就是 提前结束这个函数
- 它的作用:
函数中 如果有需要返回的计算结果 那么这个函数需要一个返回值
- 目的是把函数中计算后的结果传递给调用者
- 确定 返回的数据 是什么类型的
- 修改函数的返回值类型 和 你要返回的数据类型一致
- 在函数中用 return 关键字返回数据
int getSum(int num1,int num2)
{
int sum = num1 + num2;
// printf("sum = %d\n",sum);
return sum;
}
int main()//主调函数
{
int result = getSum(10,20);
printf("result = %d\n",result);
}
**主调函数在接受返回值是 定义一个和被调函数数据返回值类型相同的变量接收即可
使用带返回值的函数注意细节
- 返回值的类型 要与接收数据变量的类型相同
- void 表示没有任何返回值不需要接收
- return的使用不管在有返回值还是诶呦返回值的函数中,都表示”结束“这个函数
- 在屋返回值的函数中,直接用 也可以不用
- 在又返回值得函数中,必须使用return数据
- 一旦函数定义了返回值,那么就必须在函数结束前有返回值
一旦定义了返回值 就要保证每一个分之结束之前必须有返回值
报错: Control may reach end of non-void function
这个错误表示 你可能在某种情况下没有返回值
上期答案时间到:
跟大家分享一道今天在网上看到的面试题
int main()
{
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
//这里写一段代码,结束外层循环
i = 10;
break;
// 答案在这里 这里
}
}
return 0;
}