C语言存储模型-创新互联

auto:默认,自动分配空间,自动回收空间

创新互联总部坐落于成都市区,致力网站建设服务有成都做网站、成都网站建设、网络营销策划、网页设计、网站维护、公众号搭建、小程序开发、软件开发等为企业提供一整套的信息化建设解决方案。创造真正意义上的网站建设,为互联网品牌在互动行销领域创造价值而不懈努力!

register:

        1. register变量必须是能被CPU寄存器所接受的类型,这通常意味着register变量必须是一个单个       的值,并且其长度应小于或等于整型的长度。这与处理器的类型有关。

        2. 声明为register仅仅是一个请求,而非命令,因此变量仍然可能是普通的自动变量,没有放在       寄存器中。

    3. 由于变量有可能存储在寄存器中,因此不能用取地址运算符“&”获取register变量的地址。       如果有这样的写法,编译器会报错。

    4. 只有局部变量和形参可以作为register变量,全局变量不行。

    5. 实际上有些系统并不把register变量存放在寄存器中,而优化的编译系统则可以自动识别使用       频繁的变量而把他们放在寄存器中。

static:静态型

   1.自动初始化为0值或空值,并值其变量的值有继承性

 void func(void)

 {

static int x = 0;

x = x + 1;

printf("%p->%d\n",&x,x);

 }

 int main()

 {

func();

func();

func();

 }

 Result:

1

2

3

 备注:这里的static就具有继承性,意思第一次定int x,下次再调用的时候就不再调用

    2.限制作用域范围

   main.c

      #include

   #include

   #include "proj.h"

   static int i = 10;

    int main()

    {

     printf("[%s]:i = %d\n",__FUNCTION__,i);

     //__FUNCTION__表示是哪个函数

     func();

     exit(0);

    }

    proj.h

    #ifndef PROJ_H__

    #define PROJ_H__

     void func(void);

    #endif

    proj.c

    #include

    #include

    #include "proj.h"

    static int i = 100;

    void func(void)

    {

     printf("[%s]:i= %d\n",__FUNCTION__,i);

     exit(0);

    }

    Result:

[main]:i = 10

[func]:i = 100

注意static

1.以上如果变量i不加static会在编译的时候会出现变量冲突,

 加了static表示只能在当前文件中使用

2.如果在void func(void)加一个static 表示只能在当前文件中调用,

 在其他文件中不能调用,如上面main.c

extern:说明型

不能改变被是一个说明的变量的值或类型

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享名称:C语言存储模型-创新互联
新闻来源:http://hbruida.cn/article/djpeos.html