您的位置:首页 > 其它

函数的定义声明 用法 形参实参 return关键字

2016-08-02 22:58 190 查看

day08 函数

什么是函数 :函数就是一段特殊功能的代码

函数 定义 的语法

函数必须写在main函数的外面

格式

eg:

数据类型 函数名称(参数列表)
{
函数体;
}
eg:
void showLogo()
{
printf("这里面的叫函数体");
}


函数调用的语法

showLogo();    这个写在main函数里面 就可以调用函数


函数的使用

* 什么时候使用函数

* 当有一段代码需要重用的时候 那么可以将这些代码封装到一个函数中什么时候想要用的时候,什么时候就可以直接调用

* 使用函数的好处

* 减少代码的冗余

* 修改维护方便

* 屏蔽代码的现实,我们只需要知道函数的功能,而不需要关心怎么实现

局部变量和全局变量的异同点

变量: 在内存中用来存储数据开辟的那块空间

局部变量: 定义在函数或者代码块内部的变量

全局变量: 定义在所有函数和代码块外部的变量

全局变量和局部变量的异同点

相同点

都是内存中的若干干字节,用来存储数据的

不同点

定义的位置不同

作用域不同(有效范围)

局部变量 : 在定义局部比那辆的代码块中有效

全局变量 : 从全局变量定一的那一行来时直到程序结束

声明周期不同

局部变量:

只有CPU执行到该行代码的时候 才会被创建 代码块或者函数执行完毕后就会回收

全局变量 :

只要程序一启动 那么全局变量就会被创建整个程序停止之后 全局变量才会被回收

默认值不相同

局部变量: 如果没有赋值,那么系统会给他一个垃圾值

全局变量: 一般来说 全局变量 如果没有赋值 那么他的值 是 0

不同类型的初始值问题

类型初始值
int0
float0.0f
double0.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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数 printf 数据 return