变量的存储类别,静态存储与动态存储

来源:互联网 发布:自学程序员好找工作吗 编辑:程序博客网 时间:2024/06/08 08:25
#include <stdio.h>/** * 变量的存储类别 * * 动态存储 与 静态存储 *      从变量的产生时间上可以分为静态存储和动态存储 *      静态存储 : 是指程序运行分配固定的存储方式, *      动态存储 : 是在程序运行期间根据需要动态地分配存储空间 *  auto        自动 *      auto关键字就是修饰一个局部变量为自动的,这意味着每次执行到定义该变量的时候,都会产生一个新的变量,并且对其重新进行初始化。 *  static      静态 *      static变量为静态变量,将函数的内部和外部变量声明成static变量的意义是不一样的。不过对于局部变量来说,static变量与auto变量 *      是相对而言的。尽管两者的作用域者是权仅限于声明变量的函数中,但是在语句块执行期间,static变量将始终保持它的值,并且初始化操作 *      只在第一次执行时起作用,在随后的运行过程中,变量将保持语句块上一次执行时的值。 *  register    寄存器 *      register变量称为寄存器存储类型变量。使用register的目的在于让程序员把指定某个局部变量存放在计算机的某个硬件寄存器而不是内存中。 *      这样的好处是楞以提高程序的运行速度。不过这只是反映了程序员的主观意愿,实际上编辑器楞以忽略register对变量的修饰。 *      用户无法获得寄存器变量的地址,因为绝大多数计算机的硬件寄存器都不占用内存地址。而且即使编译器忽略register而把变量存放在可设定的 *      内存中,也是无法获取变量地址的。 *      如果想有效地利用寄存器register关键字,必须像汇编语言程序员那些了解处理器的内部结构,知道可用于存放变量的寄存器的数量,种类以及 *      工作方式。但是,在不同的计算机对于这些细节可能是不同的,因此,对于一个要具备可移植的程序来说,register的作用并不大 *  extern      外部 *      extern变量称为外部存储变量。extern声明了程序中将要用到但尚未定义的外部变量。通常外部存储类都用于声明在另一个转换单元中定义的变量。 *      一个工程通常是由多个C文件组成的。这些源代码文件分别编译,然后链接成一个可执行的模块,把这样一个程序作为一个工程进行管理,并且成生一 *      个工程文件来记录所包含的所有源码文件。 * */int main() {//    testAuto();//    testAuto();//    testStatic();//    testStatic();//    testRegister();//    testRegister();    testExtern();    testExtern();    return 0;}// auto关键字,楞以省略不写,即变量的默认存储方式是auto,此方法被调用两次,同样都输出结果为:2void testAuto() {    auto int i = 1;    i++;    printf("%d\n", i);}// static关键字,变量i只会被赋值一次,调用两次的输出结果为2,3void testStatic() {    static int i = 1;    i++;    printf("%d\n", i);}// register寄存器变量void testRegister() {    register int i = 1;    i++;    printf("%d\n", i);}// extern外部文件变量void testExtern() {    extern int i;    printf("%d\n", i);}

// 以下为testExtern.c文件中的内容

//// Created by Administrator on 2016/10/28.//int i = 100; /* 在另一个文件中定义的变量i */

1 0
原创粉丝点击