为什么我们使用static
与指针数组,它的意义是什么?
AUTO(默认),静态,外部& amp;寄存器是 C 中变量的 4 个修饰符。
auto
:C 变量的默认存储类(即不需要显式指定auto
)。
static
:更改变量的生存期。(保留范围,无更改)。
这意味着,在运行时,操作系统NOT一旦函数(包含变量退出)从内存中删除变量,并在每次调用函数时初始化变量。
相反,静态变量仅在函数(包含它的函数被调用)第一次被初始化。然后它继续驻留在内存中,直到程序终止。换句话说,STATIC有效地在内存中创建了一个变量 GLOBAL,但只有本地访问。
您的静态存储取决于它们是否初始化为 0。
0 初始化的静态数据进入.BSS(由符号开始的块),
非 0 初始化数据进入.DATA
必须注意,虽然静态变量总是在内存中,但只能从本地范围(它们定义的函数)访问它们。
extern
:用于向编译器发出信号,表示 extern-definition 只是一个占位符,而实际定义在其他地方。将变量声明为 extern 将导致程序在声明的范围内不为变量保留任何内存。找到声明为 extern 的函数原型也很常见。
register
:向编译器发出信号,表示最好使用 CPU 寄存器(而不是 RAM)来存储此变量。当重复访问变量时(对于 ex:loop 计数器变量),用于提高性能。
我假设你说的是auto
变量,你可能指的是函数中的局部变量。auto
是默认值,这意味着当函数被调用时,变量在堆栈上分配,当函数返回时,变量被释放。static
表示第一次调用函数时,变量被分配一次,并保持为程序的其余部分分配。这意味着:
int foo() {
static int x = 0;
return x++;
}
printf("%d\n", foo()); // Outputs 0
printf("%d\n", foo()); // Outputs 1
printf("%d\n", foo()); // Outputs 2
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(14条)