在程序中声明变量后,编译器就会为该变量分配相应的内存单元。也就是说,每个变量在内存会有固定的位置,有具体的地址。由于变量的数据类型不同,它所占的内存单元数也不相同。如下列声明了一些变量和数组。
int i = 18; // 声明整形变量 i ,并赋值
char c[5] = { 89, 90, 91, 92, 93 }; // 声明字符型数组 c 并初始化
float f = 12.89; // 声明单精度浮点型变量 f 并赋值
double d = 1.414213; // 声明双精度浮点型变量 d 并赋值
在程序编译时,编译器将制定这些变量和数组所需要的存储空间长度。程序运行中,则由操作系统为这些变量和数组分配内存单元。整形变量所占用的内存为 2 字节,长度为 5 的字符型数组所占用的内存为 5 字节,单精度浮点型变量所占用的内存为 4 字节,双精度浮点型所占用的内存为 8 字节。由于计算机内存最小的寻址单位是字节,设变量的存放从内存 3000 单元开始,则操作系统为这些变量和数组分配内存单元,如下图所示:
变量在内存中按照数据类型的不同所占内存的大小也不同,每个变量都有具体的内存单元地址,如变量 i 在内存的地址是 3000,占据 2 个字节后,数组 c 的内存首地址就为 3002,变量 f 的内存地址为3008等。对内存中变量的访问,过去用“scanf("%d