一维数组的存储
一维数组在内存中是一段连续的存储区域 。
格局如下:
验证代码如下:
#include <stdio.h>
int main()
{
int arr[10] = {0};
for(int i =0 ; i< sizeof(arr)/sizeof(arr[0]);i++)
{
printf("&arr[%d] = %p\n",i,&arr[i]);
}
return 0;
}
数组三要素
数组的声明中,己经把数组访问的三要素,均己表示出来了,三要素就是, 起始位置,移步刻度,终止位置(范围)。
比如 int arr[10]; //这里 int 是 步长,4个字节一步长 ;arr是起始地址 ; [10] 是范围
PS:
所有学习过 C 语言的人,可能都会有一个疑问,数组的下标为什么从零开始。
因为 C 语言,脱胎于汇编语言,稍微懂点汇编的人, 就知道 [ ] 是一种基址变址运算符。基于起始位置偏移 0 个单位处,开始存放数据,故下标从 0 处开始。
这里我们可以看下面这个例子
#include<stdio.h>
int main()
{
int arr[10] = {0,1,2,3,4,5};
printf("%p %p\n",&arr[0],arr);//两者结果相同
//arr有两重意思,1.代表构造类型;2.代表首元素的地址
printf("%d %d\n",arr[1],1[arr]); //[ ]下标运算符,结果都相同
//这里本质前者arr的地址偏移一个单位,后者 1的单位地址偏移arr个单位
return 0;
}