学科分类
目录
C语言

数组的起始地址

一个变量在内存中占据一块空间,这块空间的地址标识着该变量的存储位置。同样,数组在内存中也占据一块空间,这块空间是连续的多个数据单元块(每个数组元素所占内存)。数组内存空间有地址标识,数组中每个元素也都有地址标识。

如果程序中有如下代码:

char ch = 'a';                     //char类型的变量ch
int num = 1;                      //int类型的变量num
int arr[5] = { 1,2,3,4,5 };       //int类型的数组arr,其大小为5

上述代码定义了一个char类型的变量ch,一个int类型的变量num和一个int类型的数组arr,它们在内存中的存储形式可以用图1描述。

图1 变量与数组的内存管理

由图1可知,变量ch在内存中占所1字节内存,内存地址为0039F833;变量num在内存中占据4字节内存,内存地址为0039F824;变量ch与num是连续定义的两个变量,但是它们在内存中的地址并不连续,这说明单个变量在内存中是零散存储的。数组arr在内存中占据5个连续的4字节大小的内存单元块,数组元素地址是连续由低到高增长的。

在数组内存中,第一个元素的地址也是数组的起始地址,这个地址由数组名保存,输出数组名就是输出数组的起始地址,对数组名执行取值运算,会输出第1个元素,示例代码如下:

printf("%p\n", arr);        //输出数组arr的首地址
printf("%p\n", &arr[0]);      //输出第1个元素的地址,它与数组首地址相同
printf("%d\n", *arr);       //对数组名执行取值运算,结果为第一个元素1
printf("%d\n", arr[0]);      //输出第1个元素,值为1
点击此处
隐藏目录