总结一下基础和我遇到的问题 (关键字 -- 存储类型)

来源:互联网 发布:智通预算软件 编辑:程序博客网 时间:2024/05/29 12:35

关键字:32个(一定要记住)

  存储类型

auto:自动型

只能修饰局部变量,但是我们注意到在定义全局变量时,存储类型也为缺省,那全局变量的默认,其实他的默认是静态存储类型 

这里补充一个小知识点:局部变量未初始化,其值为随机值;

                                   全局变量未初始化,其值为0

register :寄存器存储类型

      这个类型不常用,他申请变量存放着寄存器里,为了尽可能的提高速度,他的存取速度要比内存快的多,而且,register变量的地址不能用 & 来获取,原因是register变量不存储在内存中(注意:有些情况是当你用&取地址时,可以打印出地址,这代表这个寄存器变量现在在内存中,他没有申请寄存器没有成功,因为寄存器个数有限);

 

参考:http://www.cnblogs.com/reality-soul/p/6369792.html

 

只有局部自动变量和形式参数才能够被定义为寄存器变量,全局变量和局部静态变量都不能被定义为寄存器变量。而且,一个计算机中寄存器数量是有限的,一般为23个,因此寄存器变量的数量不能太多。对于在一个函数中说明的多于23个的寄存器变量,C编译程序会自动地将寄存器变量变为自动变量。 受硬件寄存器长度的限制,寄存器变量只能是charint或指针型,而不能使其他复杂数据类型。由于register变量使用的是硬件CPU中的寄存器,寄存器变量无地址,所以不能使用取地址运算符"&"求寄存器变量的地址。(选自博客园  knightsoul)


static:静态型

     作用:

            限制作用域:1)修饰局部变量时,变量只作用在本函数内;

2)修饰全局变量时,变量只作用在本文件,外部函数不能用;

            限制变量存储域:将变量存储在静态区,只初始化一次,下次调用时引用上一次的值;

           这个类型做题的话经常遇到,在之后的工作中也非常常见,比如一个项目的话,是多个人一起去做,肯定会遇到这样的一种情况:(A写的文件需要调用B文件的中的变量int b,那么A会在他的文件中使用extern int b,那么如果C的文件中也存在变量b的话,就会造成出错,这里C就可以使用static int b,这样b就不会别外部引用)

看一下这个例子:

#include <stdio.h>

static int j;

int fun1()

{

      staticint i = 0;

      i++;

      returni;

}

 

void fun2()

{

      j= 0;

      j++;

}

 

int main()

{

      intk;

      inta;

      for(k= 0;k < 9;k++)

      {

             a= fun1();

             fun2();

      }

      printf("%d\n",a);

      printf("%d\n",j);

}

结果是 10  1

注意:static语句只执行一次,之后再次调用时不再执行


 extern:外部引用
 外部引用变量,编译时需要将多个文件同时编译,用来表示该变量或函数不是本文件定义,而是来自于其他模块的变量或函数的声明,提示链接器遇到该变量或函数时,到其他模块解析和绑定此标识符。

阅读全文
1 0
原创粉丝点击