前言
欢迎来到我的博客
个人主页:北岭敲键盘的荒漠猫-CSDN博客
本文将整理c语言的储存类型的知识点
储存类型概念
描述:用于解决内存开辟与解放的时间的问题。跟作用域没啥关系。
但是呢,他也是能影响到程序的运行的,所以是很关键的。
类型:
auto :自动变量,默认的类型
static: 静态变量
extern: 拓展变量
auto变量
描述:默认变量,我们不定义的话他默认是这个。这个的内存开辟为,执行这个定义变量语句的时候就会开辟内存空间,当我们执行完这个变量所在的定义域的时候就会解除他所占用的空间。
因为我们之前一直都是用这个默认的变量,所以我就不多废话了。
static静态变量
官方理解:这个变量从执行后就会一直存在,他的内存直到程序结束的时候才会释放。
方便的理解:比如在函数中,定义后他就一直存在,下次调用函数不再定义他,而是使用上次定义的这个变量进行操作。
他的作用分为两种:
局部变量
全局变量
全局变量
提前预知:我们一个c文件中的函数或者变量,是可以引入到其他的c文件中使用的。
static定义全局变量的效果:没错,就是禁止这个全局变量能够被拿到其他的文件中使用,让他只能在本文件中使用。
局部变量
描述:在局部变量中,我们用startic定义变量,倒是可以直接把这个静态变量所在的函数引用的其他的文件中。但是在局部变量中,这个startic变量是从执行他开始就存在,一直存在到程序结束。中途要是重复调用函数,再到他赋值的这行代码,就会直接跳过。
案例演示:
#include <stdio.h>
int fun()
{
static int a = 1;
a++;
printf("%d", a);
}
int main()
{
int b;
for (b = 0; b < 5; b++) // 循环执行函数三次
fun();
}
结果如下:
你看,按理来说每次执行函数都应该执行一个a=1,重置a,但是我们加上了startic之后,他就会跳过,不会再重新赋值了。
注意点:如果是定义了startic变量,而且没给他赋初始值的话,他就自己默认为0.
#include <stdio.h>
int fun()
{
static int a;
printf("%d", a);
}
int main()
{
fun();
}
extern变量
extern有两个作用,
第一个是声明主函数下面的变量,让主函数能够使用下方变量。
第二个是从其他文件中找到这个变量,来引入到这个文件中。
从exper1中获取a变量,然后再exper中使用。
他与include的差距就是,他是引入一个变量,include引入整个文件。