函数
一、概念
(一)函数的作用:
(二)函数的功能:
(三)函数的分类:
(四)函数示例:
int main(){
max(4,3,2);
max(4,7,9);
return 0;
}
int max(int a,int b,int c){//a b c为形参
int max;
if(a > b){
max = a;
}else{
max = b;
}
if(c > max){
max = c;
}
printf("%d\n",max);
}
二、定义和调用
(一)定义:
若无返回值,则返回值类型为void
(二)调用:
1.一般格式:
注:形参在未被调用时不分配内存空间
2.无参无返回值:
int main(){
show();
return 0;
}
void show (){
printf("我是无参无返回值!");
}
3.无参有返回值:
int main(){
int i = show();
printf("%d\n",i);//输出2(返回值)
return 0;
}
int show (){
printf("我是无参有返回值!\n");
return 2;
}
若函数类型和返回值类型不一致,以函数类型为准,例如:
int main(){
printf("%d\n",show());//输出3
return 0;
}
int show(){
return 3.14;
}
注:返回值可以是常量 变量 表达式
4.有参无返回值:
int main(){
show(2);
return 0;
}
void show(int a){
printf("我是有参无返回值!\n");
printf("%d",a);
}
5.有参有返回值:
int main(){
max(4,3,2);
max(4,7,9);
return 0;
}
int max(int a,int b,int c){//a b c为形参
int max;
if(a > b){
max = a;
}else{
max = b;
}
if(c > max){
max = c;
}
printf("%d\n",max);
}
注:有参时必须传入参数,并且个数 类型必须保持一致
实参可以是变量 常量 表达式。
pt:假为0,真为1:
int main(){
printf("%d",show());//输出0
return 0;
}
int show(int a){
return 1>2;
}
三、return和exit(0)的区别:
return终止函数,exit(0)终止整个程序
四、函数声明:
如果定义的函数在main之后,需要函数声明,否则有waring,将函数定义拷贝到main函数前面,去掉函数体:
int show();//函数声明
int main(){
printf("%d",show());
return 0;
}
int show(){
return 1>2;
}
函数声明的作用:便于编译器找到函数
五、作用域
(一)局部变量:
1.概念:
变量执行定义后会分配内存空间;变量使用遵循就近原则
2.静态局部变量:
void show();
int main(){
show();//2
show();//3
show();//4
return 0;
}
void show(){
static int a = 1;
a ++;
printf("%d ",a);
}
问:为什么输出结果为 2 3 4?
静态变量的值赋值一次,初始化为2,调用一次后初值变为3,依次变化
若静态没有赋初值,则系统自动赋值为0
普通局部变量和静态局部变脸的不同:
从内存分配看:
普通局部变量只有执行到定义变量的语句,才会分配内存 ,而静态局部变量在编译阶段已经分配好了内存;普通局部变量离开{}后,它的值自动释放,,静态局部变量只有整个程序结束后才会自动释放
从初始化角度看:
普通局部变量不初始化,若不赋值,则值为随机值,静态变量若不赋值,值为0
(二)全局变量:
1.概念:
int a = 10;//全局变量
int main(){
printf("%d",a);
return 0;
}
全局变量不初始化,默认为0
全局变量的声明:extern int a;告诉编译器,int a 的定义在后面
全局变量的声明可以多次,但定义必须一次
2.静态全局变量:
static全局变量的作用域时文件作用域,extern只适用普通全局变量,且普通全局变量所有文件可以使用,提前声明即可;static全局变量只能在本文件使用