0%

C++语言 简介

C语言的存储类型关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
/*beginner/auto/auto1.c*/
#include <stdio.h>

int main()
{
int year = 2011;
auto int month = 2;

printf("Year : %d\n", year);
printf("Month: %d\n", month);

return 0;
}

上面的实例定义了两个带有相同存储类的变量。

auto 只能用在函数内,即 auto 只能修饰局部变量

register 存储类型

register 存储类型用于定义存储在寄存器中而不是 RAM 中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一个词),且不能对它应用一元的 & 运算符(因为它没有内存位置)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*beginner/register/register2.c*/
#include <stdio.h>

int main()
{
register int sum = 0;
int i = 0;

for (i = 0; i <= 100; i++)
{
sum += i;
printf("Sum : %d\n", sum);
}

return 0;
}


寄存器主要用于快速访问及变化的变量,比如计数器。不过,定义 register 并不意味着变量将被存储在寄存器中,它意味着变量可能存储在寄存器中,只是可能,这取决于硬件和实现的限制,所以这个一般不太实用,除非对系统很精通,确认是寄存器使用,才能起到加速的效果。

static 存储类型

static有多重用法,这里先说一下作为存储类型的用法,这个功能对于需要在某个函数进行初始化且需要保持状态作用大大滴。

  • static 存储类型指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。

  • static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内,还未说到多个文件,后续再介绍

  • 全局声明的一个 static 变量或方法可以被任何函数或方法调用,只要这些方法出现在跟 static 变量或方法同一个文件中。

以下实例演示了 static 修饰全局变量和局部变量的应用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*beginner/static/static3.c*/
#include <stdio.h>

void localfunc(void);

static int global = 10;

int main()
{
while (global--)
{
localfunc();
}
return 0;
}
void localfunc(void)
{
static int local = 5;
local++;
printf(" local : %d , global : %d\n", local, global);
}

可以看到运行的结果为:

1
2
3
4
5
6
7
8
9
10
11
$ ./storage3
local : 6 , global : 9
local : 7 , global : 8
local : 8 , global : 7
local : 9 , global : 6
local : 10 , global : 5
local : 11 , global : 4
local : 12 , global : 3
local : 13 , global : 2
local : 14 , global : 1
local : 15 , global : 0
处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道