1.函数的定义:子程序,是一个大型程序中的部分代码,由一个或多个语句块组成,负责完成某项特定任务,具有相对独立性。
2.函数分类:
>库函数(完成有限的功能)
>自定义函数(可以实现自己想要的逻辑)
3.库函数:顾名思义是把函数放到库里..是别人把一些常用到的函数编完放到一个文件里,供别人用.
>库函数分类:IO函数,字符串操作函数,字符操作函数,内存操作函数,时间/日期函数,数学函数,其他库函数。
如:
strcpy
char*strcpy(char*destination,const char*source);
printf
int printf(const char*format,…);
注意:使用户库函数时必须包含#include对应的头文件。
4.自定义函数:和库函数一样有函数名,返回值类型,函数参数,但这些要我们自己设计
>函数组成
t_type f_name(para,……){
//语句项
}
t_type 返回类型
f_name函数名
para 函数参数
>例:交换两个整形变量的内容。
#include<stdio.h>
void is_exchenge(int a,int b){
a^=b;
b^=a;
a^=b;
printf("%d,%d\n",a,b);
}
int main() {
int a,b;
scanf("%d%d",&a,&b);
is_exchenge(a,b);
return 0;
}
5.函数的参数。
>实参:真实传给函数的参数。实参可以是常量,变量,表达式,函数。函数在调用时必须有确定的值。
>形参:函数名后括号中的变量。形式参数只有在函数被调用的过程中才实例化。形参在调用完后自动销毁,因此只在函数中有效。形参的实例化相当于实参的一份拷贝。
6.函数的调用
>传值调用:传入数值。函数的形参和实参分别占用不同内存块,对形参的修改不会影响到实参。
>把函数外部创建变量的内存地址传给函数参数。可以让函数和函数外边的变量建立起真正的联系,也就是说函数内部可以直接操作函数外部的变量。
补充:(1)任何函数只要传参就必须生成临时变量。
(2)C语言中可以不写返回类型,默认返回类型为int。
is_fun(){};
7.函数的声明和定义:
>函数的声明:只有函数的返回类型,函数参数,函数名。并没有具体实现。声明一般放在头文件中。
int f_fun(int a);
>函数的定义:指函数的具体实现,交代函数功能的实现。也就是函数体。
>在头文件中声明函数:
#ifndef _TEST_H_
#define ……
//函数的声明
//声明的内容必须写在#define 和#endif 之间
#endif
>在源文件中函数的实现:
#include"头文件名"
int fun(int a){
a=2; //具体实现
return a;
}
8.链接属性:
>外部链接属性:一个标识符不仅可以在当前源文件中使用,使用extern声明还可以在其他源文件中使用。
add.c源文件
int Add(int i,int j){return i+j;}
int a=100; //具有外部属性链接
main.c源文件
#include<stdio.h>
extern int Add(int ,int); //只引用名称,不引用函数体
extern int a; //引用变量时不能对变量赋值
int main(){}
>内部链接属性:外部连接属性加上static关键字修饰。
add.c源文件
static int Add(int i,int j){return i+j;}
static int a=100; //具有内部属性链接
main.c源文件
#include<stdio.h>
extern int Add(int ,int); //只引用名称,不引用函数体
extern int a; //引用变量时不能对变量赋值
int main(){}
>无属性:局部变量就是无属性