函数(Function)
0.引言
算法的结构化设计
标准函数(库函数)和自定义函数
程序从main函数开始,在main函数结束
main函数可以调用其他函数,但是其他函数不能调用main函数,main函数是系统调用的。
————————————————————————————————————————————————————————————————————————————————————
1.有参函数和无参函数
参数:函数的一个明显特征是使用时带(),必要时,括号里面还要包括数据或是变量,称为参数;
所以,函数又可以分为有参函数和无参函数
无参函数
返回类型 函数名()
{
函数体
}
有参函数
返回类型 函数名(函数参数列表)
{
函数体
}
实际参数和形式参数
形参:被调用函数后面括号里面的变量名称
实参:主调用函数调用一个函数时函数后面括号里面的参数
函数不允许嵌套定义
void a()
{
……
void b()
{
……
}
……
}
————————————————————————————————————————————————————————————————————————————————————
2.返回值
通过return 语句进行返回的内容
返回值的类型必须和返回类型相同
void:
1.返回值
2.参数
————————————————————————————————————————————————————————————————————————————————————
3.函数的直接调用和间接调用
调用一个函数的时候必须要保证要么调用的函数定义在我的前面,要么就是已经完成了对函数的说明
声明的作用是把函数名,函数参数的个数和参数类型等信息通知编译系统,以便在遇到函数调用时,编译系统
能够正确识别函数并检查调用是否合法
int sum(int a,int b)
{
return a + b;
}
//int sub(int ,int );
int main()
{
int sub(int a,int b);
printf("sum = %d\n",sub(3,2));
printf("sub = %d\n",sum(3,2));
return 0;
}
int sub(int a,int b)
{
return a - b;
}
声明和定义是有区别的!!!
在调用一个函数的过程中,直接或者是间接的调用本身,称为函数的递归调用
3.猴子吃桃子问题
————————————————————————————————————————————————————————————————————————————————————
4.局部变量和全局变量
局部:在函数内定义的变量(包括形参)
全局: 在函数外定义的变量
局部可以和全局重名
同名不要紧,只要域不同
具体看哪个,就近往上找
————————————————————————————————————————————————————————————————————————————————————
5.进程的地址空间
详见图示
————————————————————————————————————————————————————————————————————————————————————
6.存储变量类别
自动的 auto 可以省略的,所有变量默认都是auto的,也就是自动分配内存空间
静态的 static
1. 局部变量,局部变量只初始化一次;
2. 全局变量,函数,代表只能在本文件被使用
外部的 extern
只能修饰全局变量和函数,代表可以被其他文件引用
寄存器的 register
请求编译器将其尽可能的存放在CPU内部的寄存器里面,而不是通过内存寻址,以提高效率
register int a;
0.引言
算法的结构化设计
标准函数(库函数)和自定义函数
程序从main函数开始,在main函数结束
main函数可以调用其他函数,但是其他函数不能调用main函数,main函数是系统调用的。
————————————————————————————————————————————————————————————————————————————————————
1.有参函数和无参函数
参数:函数的一个明显特征是使用时带(),必要时,括号里面还要包括数据或是变量,称为参数;
所以,函数又可以分为有参函数和无参函数
无参函数
返回类型 函数名()
{
函数体
}
有参函数
返回类型 函数名(函数参数列表)
{
函数体
}
实际参数和形式参数
形参:被调用函数后面括号里面的变量名称
实参:主调用函数调用一个函数时函数后面括号里面的参数
函数不允许嵌套定义
void a()
{
……
void b()
{
……
}
……
}
————————————————————————————————————————————————————————————————————————————————————
2.返回值
通过return 语句进行返回的内容
返回值的类型必须和返回类型相同
void:
1.返回值
2.参数
————————————————————————————————————————————————————————————————————————————————————
3.函数的直接调用和间接调用
调用一个函数的时候必须要保证要么调用的函数定义在我的前面,要么就是已经完成了对函数的说明
声明的作用是把函数名,函数参数的个数和参数类型等信息通知编译系统,以便在遇到函数调用时,编译系统
能够正确识别函数并检查调用是否合法
int sum(int a,int b)
{
return a + b;
}
//int sub(int ,int );
int main()
{
int sub(int a,int b);
printf("sum = %d\n",sub(3,2));
printf("sub = %d\n",sum(3,2));
return 0;
}
int sub(int a,int b)
{
return a - b;
}
声明和定义是有区别的!!!
在调用一个函数的过程中,直接或者是间接的调用本身,称为函数的递归调用
3.猴子吃桃子问题
————————————————————————————————————————————————————————————————————————————————————
4.局部变量和全局变量
局部:在函数内定义的变量(包括形参)
全局: 在函数外定义的变量
局部可以和全局重名
同名不要紧,只要域不同
具体看哪个,就近往上找
————————————————————————————————————————————————————————————————————————————————————
5.进程的地址空间
详见图示
————————————————————————————————————————————————————————————————————————————————————
6.存储变量类别
自动的 auto 可以省略的,所有变量默认都是auto的,也就是自动分配内存空间
静态的 static
1. 局部变量,局部变量只初始化一次;
2. 全局变量,函数,代表只能在本文件被使用
外部的 extern
只能修饰全局变量和函数,代表可以被其他文件引用
寄存器的 register
请求编译器将其尽可能的存放在CPU内部的寄存器里面,而不是通过内存寻址,以提高效率
register int a;