1.库函数:
编译器提供的可在C源程序中调用的函数.为两类:
- 一类是C语言标准库规定的库函数
- 一类是编译器提供的库函数
2.用户自定义函数
用户把自己的算法编成一个个相对独立的函数模块,通过调用的方法来使用函数
可以参考 <<Linux下的C函数手册.chm >> :
Linux下的C函数手册.chm
(335.8 KB, 下载次数: 0, 售价: 2 金币)
函数概述:
函数的定义:实现函数功能\确定函数体\返回值\形参.让函数存在.
函数的声明:不是实现函数功能,仅仅说明该函数有返回值类型\形参类型\函数名.
函数的调用:函数的执行
1.函数的定义:
//返回值类型:函数将来返回值的类型
//函数名:函数的入口地址
//形参:函数外部数据 传递到函数内部的桥梁
//函数体:具体的函数功能
返回值类型 函数名(形参类型 形参)
{
函数体;
}
2.函数声明:
3.函数的调用
//函数外部的实际数据
函数名(实参);
[b]案例:
[pre]#include<stdio.h>
//函数的声明:告诉编译器 该函数存在 请通过编译
void myfun();
int main(int argc,char *argv[])
{
//函数的调用:函数名+()
myfun();
return 0;
}
//函数的定义
void myfun()
{
printf("my fun\n");
return; //1.返回函数结果 2.结束函数
}
可以省略函数声明:函数的调用在函数定义的下方 就可以省略函数声明
函数参数
1.如果函数没有参数 请将形参写成 viod
#include<stdio.h>
void myfun(void);
int main(int argc,char *argv[])
{
//myfun(10,20);//err
myfun();
return 0;
}
//如果函数的参数 为void 在调用的时候 就不要给函数传递实参
void myfun(void)
{
printf("my fun\n");
return;
}
3.函数参数的传递
#include<stdio.h>
int my_add(data1,data2);
int main(int argc,char *argv[])
{
int data1 = 10,data2=20;
int ret = my_add(data1,data2);
printf("ret = %d\n",ret);
return 0;
}
int my_add(int a,int b)
{
int ret = a + b;
return ret;
}
注意:
- 函数的形参 本质 是函数的局部变量
- 形参 在函数定义的时候不会开辟空间,只在函数调用的时候才开辟空间
- 形参 在函数结束的时候才被释放.
int my_add(int a,int b) //a b 就是形参
{
int ret = a + b;
return ret;
}
4.函数名代表的是函数的入口地址
#include<stdio.h>
int my_add(data1,data2);
int main(int argc,char *argv[])
{
int data1 = 10,data2=20;
int ret = ((int(*)(int,int))(0x0040100F))(data1,data2);//my_add(data1,data2);
printf("ret = %d\n",ret);
printf("%p\n",my_add);//my_add代表函数的入口地址
return 0;
}
int my_add(int a,int b) //a b 就是形参
{
int ret = a + b;
return ret;
}
5.函数的返回值 <= 4 字节 存放寄存器, >4字节 存放在栈区
案例:自定义对应函数 求一个数组最大值 和 最小值
#include<stdio.h>
void my_input_arr(int a[5],int len)
{
int i = 0;
printf("请输入%d个int数据\n",len);
for(i=0;i<len;i++)
{
scanf("%d",&a);
}
}
void my_print_arr(int a[5],int len)
{
int i = 0;
for(i=0;i<len;i++)
{
printf("%d ",a);
}
printf("\n");
}
int my_max(int a[5],int len)
{
int i = 0;
int tmp_max = 0;
for(i=0;i<len;i++)
{
if(tmp_max <a)
tmp_max = a;
}
return tmp_max;
}
int my_min(int a[5],int len)
{
int i = 0;
int tmp_min = a[0];
for(i=0;i<len;i++)
{
if(tmp_min > a)
tmp_min = a;
}
return tmp_min;
}
void test01()
{
int arr[5]={0};
int n = sizeof(arr)/sizeof(arr[0]);
int i =0;
int max = 0,min = 0;
int ret = 0;
//键盘给数组赋值
my_input_arr(arr,n);
//遍历该数组
my_print_arr(arr,n);
//计算数组的最大值
max = my_max(arr,n);
printf("max = %d\n",max);
//计算数组的最小值
min = my_min(arr,n);
printf("min = %d\n",min);
return;
}
int main(int argc,char *argv[])
{
test01();
return 0;
}
案例:分文件
main.c
#include<stdio.h>
#include"my_fun.h"
void test01()
{
int arr[5]={0};
int n = sizeof(arr)/sizeof(arr[0]);
int i =0;
int max = 0,min = 0;
int ret = 0;
//键盘给数组赋值
my_input_arr(arr,n);
//遍历该数组
my_print_arr(arr,n);
//计算数组的最大值
max = my_max(arr,n);
printf("max = %d\n",max);
//计算数组的最小值
min = my_min(arr,n);
printf("min = %d\n",min);
return;
}
int main(int argc,char *argv[])
{
test01();
return 0;
}
my_fun.c
#include<stdio.h>
#include"my_fun.h"
void my_input_arr(int a[5],int len)
{
int i = 0;
printf("请输入%d个int数据\n",len);
for(i=0;i<len;i++)
{
scanf("%d",&a);
}
}
void my_print_arr(int a[5],int len)
{
int i = 0;
for(i=0;i<len;i++)
{
printf("%d ",a);
}
printf("\n");
}
int my_max(int a[5],int len)
{
int i = 0;
int tmp_max = 0;
for(i=0;i<len;i++)
{
if(tmp_max <a)
tmp_max = a;
}
return tmp_max;
}
int my_min(int a[5],int len)
{
int i = 0;
int tmp_min = a[0];
for(i=0;i<len;i++)
{
if(tmp_min > a)
tmp_min = a;
}
return tmp_min;
}
my_fun.h
//声明函数
//extern 告诉编译器 该函数来自于其他文件(extern 声明函数外部可用)
extern void my_input_arr(int a[5],int len);
extern void my_print_arr(int a[5],int len);
extern int my_max(int a[5],int len);
extern int my_min(int a[5],int len);
|