作者:余小小
日期:2021-10-02
存储类
-
定义 C 程序中变量/函数的范围(可见性)和生命周期
-
简单 的说,控制变量/函数的使用区域
-
可以和java中的public product,default,private比较一下
可以使用的存储类型:
-
auto:是局部变量的默认存储类, 限定变量只能在函数内部使用;(变量默认的值)
-
register
-
static
-
extern
auto 存储类
-
auto 存储类是所有局部变量默认的存储类(自动的)
-
auto 只能用在函数内,即 auto 只能修饰局部变量。
{
int mount;
auto int month;
}
register 存储类
-
register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量。
-
这意味着变量的最大尺寸等于寄存器的大小(通常是一个字)
-
且不能对register修饰的变量应用一元的 ‘&’ 运算符
-
定义 ‘register’ 的变量并不意味着变量将被存储在寄存器中,它意味着变量可能存储在寄存器中,这取决于硬件和实现的限制
-
寄存器只用于需要快速访问的变量,比如计数器。
{
register int miles;
}
static 存储类
-
static 存储类指示编译器在程序的生命周期内保持局部变量的存在
-
不需要在每次它进入和离开作用域时进行创建和销毁
-
使用 static 修饰局部变量可以在函数调用之间保持局部变量的值,就是可以不用return而修改变量的值
-
static 修饰符也可以应用于全局变量。会使变量的作用域限制在声明它的文件内(只有当前的这个c文件可以使用)
-
全局声明的一个 static 变量或方法可以被任何函数或方法调用(只有当前的这个c文件可以使用)
-
全局变量 – static 是默认的
#include <stdio.h>
/* 函数声明 */
void func1(void);
static int count=10; /* 全局变量 - static 是默认的 */
int main()
{
while (count--) {
func1();
}
return 0;
}
void func1()
{
/* 'thingy' 是 'func1' 的局部变量 - 只初始化一次
* 每次调用函数 'func1' 'thingy' 值不会被重置。
*/
static int thingy=5;
thingy++;
printf(" thingy 为 %d , count 为 %d\n", thingy, count);
}
extern 存储类
-
extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。(补充了static的文件作用域缺陷)
-
当您使用 extern 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。(自动寻找相同的名字的变量,然后使用同一片空间)
-
extern 是用来在另一个文件中声明一个全局变量或函数。
第一个文件
#include <stdio.h>
int count ;
extern void write_extern();
int main()
{
count = 5;
write_extern();
}
第二个文件
#include <stdio.h>
extern int count;
void write_extern(void)
{
printf("count is %d\n", count);
}
暂无评论内容