C语言之函数的递归

本文详细介绍了C语言中的递归调用概念,以及作用域和存储范围的区别,包括全局变量、局部变量、栈变量的特性,静态区的使用以及extern关键字对扩展作用域的作用。
摘要由CSDN通过智能技术生成

C语言之小细节

1.什么是递归调用

递归可以是调用别人的函数,重复调用,也可以是自己调用自己,那么怎么调用自己呢

比如说求阶乘

1

自己可以试着理解一下

2.作用域

即为变量的作用范围
int main(void)
{
	int a=10;
	a=20;
	return 0;
}
void fun (int b)
{
	a=30;
}

​ 虽然两个都是a;但是主函数里面的a 不能再fun函数里面的a应用,两个表示不同.,作用域就是作用的空间,在不同空间里,不能相互使用.

在主函数 里面的a.叫做 全局变量

在其他函数里面叫做 局部变量

3.存储范围

1.存储空间的应用
int main()
{
	int a=10;
	fun(a);
	printf("%d\n",a);
	return 0;
}
void fun (int b)
{
	b=20;
}

这里int a =10; 相当于开辟一块空间 ,把这个空间命名为a;穿进去10,穿进去a的3

当调用fun(a)

当在fun函数里的时候,开辟内存,当使用完之后,返回b,销毁内存

a当在return 0 后销毁a的·内存.

2.栈变量(可以理解为局部变量)

2

开辟空间的流程

3

注意,局部变量可以用auto修饰,全局变量不行,默认情况下,可以省略

全局变量用static声明

static 静态区

4

void fun (int a);
int main(void)
{
	fun (1);
	fun (2);
	return 0;
}
void fun(int a)
{
	static int b=1;
	b++;
	printf("%d\n",b)
}

怎么理解上面的那句话呢?

全局变量只能在编译时,开辟内存,例如上问

当运行结果fun(1)是2,fun(2)是3,

什么有意思呢?

static int b=1; 是全局变量,只会在编译的时候有用,也就是运行前面运行一次,所以,在这个程序中编译一次,运行两次,当在fun(1)中开辟空间 b=1;b++;所以fun(1)编译的结果是2,当进入fun(2)是,因为static int b=1;在编译时有效,这里不运行,只运行b++;

fun(2)的结果是3

注意 形参不能用static 修饰
全局变量不赋初值,默认为0;+
extern int c扩展作用域
注意 形参不能用static 修饰
全局变量不赋初值,默认为0;+
extern int c扩展作用域
在以原函数声明,使用extern 扩展,可以在另一个人函数中使用.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叁生花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值