一般认为在c中分为这几个存储区
1栈 - 有编译器自动分配释放
2堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收
3全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束释放
4文字常量区--专门放常量的地方,比如字符串常量。 - 程序结束释放
5代码区 存放程序代码
----Static作用
1)隐藏,所修饰的对象(变量或者函数)只能在本文件使用
2)所修饰的变量初始化为0x00
3)所修饰的变量在静态存储区分配,程序结束时释放
区别:基本数据类型变量,结构体变量,指针变量,类变量(delphi)
基本数据类型变量:是栈一块内存的别名,该内存的内容是值。
结构体变量:是堆中一个内存的别名,该内存的的内容是该值。
类变量(对象):是栈中分配的内存,该内存的内容是一个对象的指针,因为sizeof(类变量)=4。
指针变量:是一个内存的别名,该内存的内容是一个地址。
静态数组名:???不能真正理解
动态数组名:是一个数组的指针
技巧:可以根据sizeof() 看看占用内存,判断该变量名称代表什么意思;引用,是内存块的一个别名,结构体变量是一个引用。
* 的意义: 基类型 *变量名 ----定义一个指针变量,*后面的变量存放的是该基类型变量的地址。 “ *变量名 ”单独使用时,表示取地址所指向的内容