参考:C语言-函数-日记
作者:9art0
发布时间:2020-08-31 00:57:06
网址:https://blog.csdn.net/GatoWong/article/details/108314011?spm=1001.2014.3001.5501
C语言-函数-日记
2.1.函数概述一
拿约会步骤举例:出门前准备——在路上——见面——回家
#include <stdio.h>
#include <stdlib.h>
int prepare(){ //没有形式参数
printf("精致打扮\n"); //printf是系统做好的函数,可直接调用
return 0; //int的返回值0
}
int ontheroad(){
printf("饭店等她\n");
return 0;
}
int dating(){
printf("你好漂亮\n");
return 0;
}
int gobackhome(int mark){//函数定义的时候,返回值、形参的类型都要规定好
printf("我能送你回家吗?\n");
if(mark==0){
printf("不可以\n");
}
else printf("可以!\n");
return 0;
}
//将要做的事全部打包进各个行程
int main()
{
prepare();
ontheroad();
dating();
gobackhome(0);
//该做什么事就把技能包拿出来
system("pause");
return 0;
}
2.2.函数概述二
为什么要函数调用?
1、代码很好看
2、容易定位问题
3、可复用性强(每一次调用都是复用)
4、分工
2.3.函数无返回参数,无返回值带一个参数
本节涉及术语:
1、定义在函数内部的变量称为局部变量(Local Variable),它的作用域仅限于函数内部, 离开该函数后就是无效的,再使用就会报错。
2、在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程序,也就是所有的源文件,包括 .c 和 .h 文件。
3、形式参数:形参是函数被调用时用于接收实参值的变量。
4、实际参数:实参是在函数调用时传递给函数的参数。
这节是老陈前辈说的一个买米的故事
#include <stdio.h>
#include <stdlib.h>
int all; //全局变量:作用范围在整份代码
//你爸让你去买米,不关心你买多少斤(参数),也不关心你买回来没(返回值)
void buyrice1() //void代表无返回值,不需要return
//void代表返回值的类型是无类型,return可以写,不过后面不加变量
{
printf("去买米");
}
//你爸让你去买米,告诉你买多少斤(参数),但也关心你买回来没(返回值)
//经验:如果错误提示中包含\243 \254的错误,说明你输入了中文符号
void buyrice2(int jinshu) //jinshu是形式参数变量的定义,所以写法也类似:如int a
{
printf("去买%d斤米",jinshu);
}
void printfwelcome()
{
printf("欢迎!\n");
printf("欢迎!\n");
printf("欢迎!\n");
}
int main()
{
int a=6;
int b=8;
printfwelcome();
buyrice1(a);//这两句a和b都是实际参数
buyrice2(b);
return 0;
}
下面的延时函数也是如此
#include <stdio.h>
#include <stdlib.h>
//调用延时函数也是一样的,
void delay1(int a) //括号里的a是形式参数
{
int i;
for(i=0;i<a;i++);
}
/*void delay2()
{
int i; //局部变量:只作用在本函数语句块
for(i=0;i<5000;i++);
}*/
int main()
{
int b;
scanf("%d",&b);
while(1){
printf("我是最棒的!");
delay1(b);//这里b是实参
}
return 0;
}
2.4.函数形式参数作用域及生存期
1.形参的作用域:仅作用于该函数
2.形参的生存期:何时出生,何时死亡
#include <stdio.h>
#include <stdlib.h>
//1.形式参数的作用域:仅作用于该函数
//2.形式参数的生存期:形式参数也是一个变量(局部变量),有自己的内存空间
/* 出生:何时申请了该空间:当函数被调用的时候,才申请了该内存空间
这个空间内的数据被赋值成实际参数的值,函数调用把实际参数的值拷贝一份给形式参数。
“去世”:何时释放了该空间:函数执行结束后,该空间由内存管理单元自动回收(释放)。
*/
void buyrice2(int a){
printf("去买%d斤米...\n",a);
printf("buy:a的地址是%p\n",&a);
a++;
printf("jinshu=%d\n",a);
}
int main()
{
int a=30;
buyrice2(a);
printf("main:a=%d\n",a);
printf("main:a的地址是%p\n",&a);
system("pause");
return 0;
}
2.5.函数形式参数和局部变量的异同点
形式参数更灵活。