当前位置 博文首页 > CW_qian的博客:7月22日C语言基础函数
函数入门
????????在C语言中,函数意味着功能模块。一个典型的C语言程序,就是由一个个的功能模块拼接起来的整体。也因为如此,C语言被称为模块化语言。
????????对于函数的使用者,可以简单地将函数理解为一个黑箱,使用者只管按照规定给黑箱一些输入,就会得到一些输出,而不必理会黑箱内部的运行细节。
黑箱的输入和输出
????????日常使用的电视机可以被理解为一个典型的黑箱,它有一些公开的接口提供给使用者操作,比如开关、音量、频道等,使用者不需要理会其内部电路,更不需要管电视机的工作原理,只需按照规定的接口操作接口得到结果。
????????对于函数的设计者,最重要的工作是封装,封装意味着对外提供服务并隐藏细节。对于一个封装良好的函数而言,其对外提供服务的接口应当是简洁的,内部功能应当是明确的。
函数的定义
返回类型 函数名称(参数1, 参数2, ……)
{
????函数体
}
int?max(int?x, int?y) // 该函数接收两个整型参数,并返回一个整型数据
{
????int?z;
????z = x>y ? x : y;
????return?z;
}
实参与形参
// 函数定义中,x、y都属于形参,位于函数 max 的栈内存中
// 它们的值由实参一一对应初始化
int?max(int?x, int?y)
{
????int?z;
????z = x>y ? x : y;
????return?z;
}
int?main(void)
{
????int?a = 1;
????int?b = 2;
????int?m;? ? ? ?
????// 函数调用中,a、b都属于实参,存储于主函数 main 的栈内存中
????m = max(a, b); ???
}
函数调用的流程
函数调用时,进程的上下文会切换到被调函数,当被调函数执行完毕之后再切换回去。
函数调用时代码的执行流程
静态函数
staitc void?f(void) // 在函数头前面增加关键字 static ,使之成为静态函数
{
???? // 函数体
}
递归函数
// 该函数的功能:依次输出 n 个自然数
// 该函数的功能:依次输出 n 个自然数
void?f(int?n)
{
????if(n < 0) ?????????// 1,当满足此条件时,不再进行递归。
????????return;
????????
????f(n-1); ???????????// 2,递归调用自己,输出前 n-1 个数
????printf("%d\n", n); // 3,输出最后一个自然数 n
}
递归调用时栈内存的变化
回调函数(钩子函数)
?
信号处理