C语言之小细节
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的
当调用fun(a)
当在fun函数里的时候,开辟内存,当使用完之后,返回b,销毁内存
a当在return 0 后销毁a的·内存.
2.栈变量(可以理解为局部变量)
开辟空间的流程
注意,局部变量可以用auto修饰,全局变量不行,默认情况下,可以省略
全局变量用static声明
static 静态区
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