C语言中函数知识点汇总

函数是什么

函数是由函数头、函数体和参数组成。函数可以理解为一个“加工厂”,参数相当于工厂所要加工的材料。要牢记形参是实参的一份临时拷贝,所以形参要和实参传入的类型一致,可以理解函数是为实现某一功能对代码所进行的封装,函数的使用极大减少了代码的冗余,提高了代码的可读性。

函数的作用域及生命周期

作用域:意思就是变量的有效范围,变量分为局部变量和全局变量,两者的最大差别是两者的作用域,局部变量的范围是所在的有效范围,而全局变量的范围为整个工程。

#include<stdio.h>
int a=20;
int main()
{
	{
		int a=10;
		printf("a1=%d\n",a);
	}
	printf("a2=%d",a);
	return 0;
}

上述案例可以看出局部变量只在其有效范围起作用。

生命周期:指的是创建内存到销毁内存的一个时间段。局部变量进入时周期开始出作用域生命周期结束,全局变量的生命周期是整个程序的生命周期。

static与extern的作用

内存中各部分所存放内容示意图
内存中各部分所存放内容示意图

栈区:一般存放的都是临时的,一般在函数调用后就会释放,但是经过static修饰时会改变变量的生命周期,使存放在栈区的局部变量变成存放在静态区的静态变量。

static的功能

①生命周期:静态变量的生命周期是整个程序的执行时间,直到程序结束。

②如果未明确初始化,则它们会被设置为0,而全局变量会默认为0。

③若定义在自定义函数内,当调用完自定义函数,其他变量会释放,static变量不会释放。

④静态变量的初始化只会在程序开始执行时进行一次。

⑤当修饰全局变量时,改变全局变量的连接属性,使外部连接属性变成内部连接属性,这种文件只能自己的.c文件使用其.c文件无法使用。

静态库的设置:

静态库的配置方法

静态库的使用:导入静态库#pragma comment (lib."库文件名.lib")

extern:用来声明外部符号

使用方法:extern 所声明的变量

函数的嵌套调用与链式访问

嵌套调用:函数之间的彼此调用,下面是函数嵌套调用所实现的一个通过函数实现计算某年某月有几天的一个代码案例

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdbool.h>
//函数嵌套调用
//判断某年某月有几天
is_year(int y)//对年份进行判断
{
	if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
		return true;
	else
		return false;
}
 void handle_fun(int x,int m)
{
	int arr[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31};
	if (is_year(x) && m == 2)//筛查出闰年二月
	{
		printf("%d", arr[m] + 1);
	}
	else
		printf("%d", arr[m]);
}
int main()
{
	int year = 0;
	int month = 0;
	scanf("%d %d",&year,&month);
	handle_fun(year, month);
	return 0;
}

链式访问:⼀个函数的返回值作为另外⼀个函数的参数,下面通过一个小小的案例进行阐述

#include <stdio.h>
int main()
{
 printf("%d ", printf("%d ", printf("%d ", 24)));
 return 0;
}
程序运行结果

可能大家会好奇为什么是这种结果这其实与printf的返回值有关,printf返回的是打印在屏幕上的个数 。

函数的递归

递归:先递推然后回归,就是运用了“大事化小”的思想,递归调用并不能无限调用,递归调用层数过多时,会导致栈空间耗尽,从而引发栈溢出错误。此外,递归调用也会消耗大量的计算资源,可能会导致程序运行缓慢甚至崩溃

下面是递归调用的具体案例

个人观点:递归分为两种一种有返回值的递归,可采用“阶梯法”进行求解具体案例可看斐波拉契数列,第二种就是无返回值的递归,这种类型就是“先递后归”。下面具体分析一下

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void fun(int n)
{
	if (n > 9)
	{
		fun(n / 10);
	}
	printf("%d ", n % 10);
}
int main()
{
	int m = 0;
	scanf("%d", &m);
	fun(m);
	return 0;
}
代码实现123打印1 2 3的推导图

总结

函数在C语言种也是一个非常有用的部分,函数实现的多文件,提高了团队的协作,并且代码的结构化提高了代码的可读性,以上是我个人对函数的总结,总结可能有一些不全面,希望各位友友可以积极指出。期待我们一同进步。

  • 25
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值