C语言中数据的存储内存
C中的数据在内存的存储可以用存储时期、作用域和链接来体现。
存储时期
存储时期分为静态的、自动的和分配的。静态的变量一般用关键字static来标示(全局变量不用static也是静态的),它在程序开始执行的时候就为变量分配内存空间,在整个程序中一直存在。自动的用auto来标示(默认省略auto),变量的内存空间要在程序执行到该变量的代码块的时候才开始分配,在退出该代码块时就自动释放了。如果是手段分配的,需要调用malloc()或者calloc()函数来开辟内存空间,同时也需要手动调用free()来释放该内存空间,如果超出改变量的作用域还没有手动释放内存,则该块内存由于无法利用而变成垃圾空间了,可能导致内存泄露。
作用域
作用域指的是那些变量可以被那些程序部分访问。文件作用域:在所有函数之外定义的变量具有文件作用域,该变量可以在全部函数中可见。代码块作用域:在代码块内定义的变量或者是函数的参数变量具有代码块的作用域,该变量在该代码块或者子块中可见。
链接
链接是指程序的变量可以被链接到其他那些地方。代码块作用域的变量是局部变量,具有空链接。文件作用域的变量又可以分为内部链接和外部链接。内部链接只能在改文件中可见,外部链接则可以在其他文件中使用。
总结,c中分为以为五种存储的变量:
1.自动:在一个代码块中声明的变量,默认省略auto修饰符。该变量具有自动存储时期,代码块作用域,空链接。注意,如果未经初始化,改变量的值不确定。
2.寄存器:在一个代码块内(或者是一个函数的头部作为参数)使用register修饰符声明的变量。该变量具有自动存储时期,代码块作用域,空链接。同自动变量一样,未经初始化,它的值不确定。
3.静态、空链接:在一个代码块内部使用static修饰符声明的变量。该变量具有静态存储时期,代码块作用域,和空连接。注意改变量仅在编译的时候初始化,如果没有初始化,则该变量的字节都被设置为0。
4.静态、内部链接。该变量在所有函数之外声明,使用static修饰符修饰。该变量具有静态存储时期,文件作用域,和内部链接。它只能在改文件中被访问到,仅在编译时初始化,如果未初始化,则其字节设置为0。
5.静态、外部链接。该变量在所有函数之外声明,不使用static修饰符修饰。该变量具有静态存储时期,文件作用域,和外部链接。它不仅能在改文件中被访问到,还可以被其它文件访问。它仅在编译时初始化,如果未初始化,则其字节设置为0。
存储时期
存储时期分为静态的、自动的和分配的。静态的变量一般用关键字static来标示(全局变量不用static也是静态的),它在程序开始执行的时候就为变量分配内存空间,在整个程序中一直存在。自动的用auto来标示(默认省略auto),变量的内存空间要在程序执行到该变量的代码块的时候才开始分配,在退出该代码块时就自动释放了。如果是手段分配的,需要调用malloc()或者calloc()函数来开辟内存空间,同时也需要手动调用free()来释放该内存空间,如果超出改变量的作用域还没有手动释放内存,则该块内存由于无法利用而变成垃圾空间了,可能导致内存泄露。
作用域
作用域指的是那些变量可以被那些程序部分访问。文件作用域:在所有函数之外定义的变量具有文件作用域,该变量可以在全部函数中可见。代码块作用域:在代码块内定义的变量或者是函数的参数变量具有代码块的作用域,该变量在该代码块或者子块中可见。
链接
链接是指程序的变量可以被链接到其他那些地方。代码块作用域的变量是局部变量,具有空链接。文件作用域的变量又可以分为内部链接和外部链接。内部链接只能在改文件中可见,外部链接则可以在其他文件中使用。
总结,c中分为以为五种存储的变量:
1.自动:在一个代码块中声明的变量,默认省略auto修饰符。该变量具有自动存储时期,代码块作用域,空链接。注意,如果未经初始化,改变量的值不确定。
2.寄存器:在一个代码块内(或者是一个函数的头部作为参数)使用register修饰符声明的变量。该变量具有自动存储时期,代码块作用域,空链接。同自动变量一样,未经初始化,它的值不确定。
3.静态、空链接:在一个代码块内部使用static修饰符声明的变量。该变量具有静态存储时期,代码块作用域,和空连接。注意改变量仅在编译的时候初始化,如果没有初始化,则该变量的字节都被设置为0。
4.静态、内部链接。该变量在所有函数之外声明,使用static修饰符修饰。该变量具有静态存储时期,文件作用域,和内部链接。它只能在改文件中被访问到,仅在编译时初始化,如果未初始化,则其字节设置为0。
5.静态、外部链接。该变量在所有函数之外声明,不使用static修饰符修饰。该变量具有静态存储时期,文件作用域,和外部链接。它不仅能在改文件中被访问到,还可以被其它文件访问。它仅在编译时初始化,如果未初始化,则其字节设置为0。