当前位置:   article > 正文

C语言小笔记_viod fac

viod fac

函数的递归调用:函数调用其本身,或者其子函数还调用此函数,那么称为函数的递归调用。

int fac( int n );
int main( void )
{
	int m = 0;
	printf( "请输入m的值:" );
    scanf( "%d",&m );
    printf( "%d\n",fac(m) );
    return 0; 
}

//函数的功能:求n的阶乘
int fac( int n )
{
	if( n < 1 )//形参的异常检查
		return -1//返回异常值
	else if( n==1 )
		return 1;
	else 
		return n*fac(n-1)
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

在这里插入图片描述

作用域
作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。换句话说,作用域决定了代码区块中变量和其他资源的可见性。作用域就是一个独立的地盘,让变量不会外泄、暴露出去。也就是说作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。

在同一个作用域不能出现相同的标识符,同一个作用域内,不能重复定义变量名

文件作用域:从文件头到文件尾的代码空间。

函数作用域:函数的参数和函数体属于函数作用域,函数的返回值和函数名属于文件作用域。

语句块作用域:

结构体作用域:

存储类别:存储类别解决的是标识符”生命周期“或者变量内存的开辟时间和销毁时间;学习存储类别时不要去考虑作用域,俩者没有关系

栈变量:auto声明的变量。
变量内存开辟时间:栈变量是在执行到变量定义语句时开辟内存。
变量内存销毁时间:所在作用域结束后销毁。

在这里插入图片描述
栈变量:
在这里插入图片描述
注意,虽然foo(20)调用时重新开辟内存块,但是和之前的开辟内存是不一样的;

自动变量存储在堆栈
静态变量存储在静态内存
所有的全局变量都是静态变量
所有的局部变量默认是自动变量,栈变量
被关键字static修饰的局部变量也是静态变量

全局区变量:用static声明的变量
注意形式参数不能声明为static,只能声明为auto;变量声明为static时,不赋初值默认为0;
全局标识符如果用static修饰,并不是表示在全局区而是表示该标识符只能在本文件内被扩展使用
变量内存开辟时间:编译时
变量内存销毁时间:主函数结束时

在这里插入图片描述
结果:2 2

结果:2 3
上图里cb内存开辟时间和销毁内存时间一样。

example:有俩个.c文件,一个是fun.c,另一个是main.c

#include <stdio.h>

int max = 0;
void fac( void ){
	max = 20;
	printf("*****");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
#include <stdio.h>
extern void fac(void);//函数声明,扩展作用域,把fac函数从fun.c扩展到了这里;只是大多数时候,我们写声明的时候没有写extern
extern int max;//把变量max的作用域从fun.c扩展到了这里 注意这里不能用int max,因为俩个.c文件都全局变量的话会产生冲突
extern int c;//扩展作用域
void fun( int a );
int main(void)
{
	fac();
	max = 100; 
	return 0;
}

int c = 10;//全局变量
void fun( int a )//局部变量
{
	static int b;//局部变量
}
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

全局标识符如果用static修饰,并不是表示在全局区而是表示该标识符只能在本文件内被扩展使用。意思是如果fun.c里的函数改为,**static void fac(void)**则报运行错误,因为fac加了static之后只能在fun.c中使用,不能再扩展到其他文件中使用,当然static int max的话也是一样的道理

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/850149
推荐阅读
相关标签
  

闽ICP备14008679号