函数
一段具有指定功能代码
函数可以重复调用的 提高了代码的复用率
自定义函数:(在main函数外面定义)
返回值类型 函数名(形参列表){
函数体
}
返回值类型:
与return呼应
如果函数没有返回值,可以声明为void
如果函数return一个值,则函数应该声明为该值的类型
函数名:
标识符
形参列表:
参数类型 形参名
形参列表中的变量只能在该函数中使用
void func(int a){
a只能在这个{}中使用
}
一个形参一个类型 即使多个形参类型一样也不能省略形参类型
int i,j;
void func(int i,int j){
}
多个形参之间用逗号","隔开
如果一个函数的形参列表为空则表明在调用该函数时可以传递任意多的参数
如果要明确调用一个函数时不能传递参数则可以声明为void
void func(void){}
void func(){}
自定义函数中的void func(int a,int b) a和b称为形参
在函数调用时func(a,b) a和b是实参 在调用函数之前必须定义
自定义可以在任何地方被调用
return:
可以结束一个函数调用 return;
可以返回一个数据
函数的参数传递
1.普通的变量 直接 值传递
2.数组
一维数组固定写法 len 数组长度
void func(int arr[],size_t len)
二维数组固定写
void func(int arr[][长度],size_t len)
二维数组形参的一维长度必须是个常量表达式
函数声明和定义可以分开
函数声明:
返回值类型 函数名(形参列表); 不需要函数体
C语言在编译代码时,如果编译到一个函数调用,而该函数没有被声明和定义,则会隐式声明一个函数 该函数的返回值类型默认为int
如果函数返回值类型为int,其实int可省
函数调用之前须声明或者实现 如果函数返回值类型为int则不会有警告
函数声明和实现分离:
一般在.h文件中存放函数声明
在.c文件中定义函数(实现)
如果在同一个文件中,一般在main函数之前声明 在main函数之后定义
编译步骤:
1.预处理
2.编译 编译阶段不会检查函数存不存在
3.汇编
4.链接
练习:
写函数查找一个升序数组中是否包含某个整数元素key(二分查找)
#include <stdio.h>
//在升序数组[left,right]中查找key元素 如果存在则返回下标 不存在返回-1
int binfind(int arr[],size_t n,int key){
int left = 0;
int right = n - 1;
while(left <= right){
int mid = (left+right)/2;//arr[mid]
if(key<arr[mid]){
right = mid-1;
}else if(key>arr[mid]){
left = mid+1;
}else{
return mid;
}
}
return -1;
}