数组的步长
定义一个数组,示例代码如下:
int arr[5] = { 1,2,3,4,5 };
上述代码定义了一个大小为5的int类型数组,通过索引访问数组元素时,由arr[0]到arr[1],索引的值增加了1,但在内存中,由第1个元素到第2个元素,内存地址并不是增加了1个字节,而是增加了4个字节。使用printf()函数输出各元素地址,可以观察各元素地址的变化,具体如例1所示。
例1 stepSize.c
1 #include <stdio.h>
2 int main()
3 {
4 int arr[5] = { 1,2,3,4,5 }; //int类型的数组arr,其大小为5
5 for (int i = 0; i < 5; i++)
6 printf("arr[%d]:%p\n", i, &arr[i]);
7 return 0;
8 }
例1运行结果如图1所示。
图1 例1运行结果
由图1可知,数组arr首元素地址为0022FD50,后面四个元素的地址依次递增4(字节)。这表明相邻元素间的地址距离为4字节。4字节就是数组arr各元素之间的内存地址距离,也称为数组arr的步长。
数组步长就是相邻数组元素之间的内存地址距离,由数组类型决定。char类型的数组,由当前元素到下一个元素,跨越了1个字节内存,步长为1字节; double类型的数组,由当前元素到下一个元素,跨越了8个字节内存,步长为8字节。
小提示:内存地址打印
程序运行结束后,变量所占内存空间会被回收,下一次程序运行时,系统会重新随机分配内存,因此每次运行程序打印的地址一般不会相同。