五、数组维度

在内存中,数组的分布是一维线性的,整个数组占用一块连续的内存

连续性、同类型、顺序存储、可以通过下标去访问每一个成员

5.1 一维数组

  • 一维数组 定义 -->数据类型 数组名[常量表达式]  -> int arry[17]

  • 数组名 表示 内存首地址 是地址常量

  • 编译时分配连续内存,内存字节数 = 数组元素个数*sizeof(元素数据类型)

  • 数组是连续的,所以可通过下标找到对应值,下标可以是产量或整型表达式

  • C语言不对数组作越界检查,使用时注意

  • int型数组,未赋值时,[0]位存值 0

  • sizeof(a)/sizeof(int)元素个数,初始化方式,int a[5] = {0};//a[0]的值为0,其余值默认为0,不初始化,其元素值为随机数

    • 只要初始化时有值,剩余空位默认为0

  • 对 static 数组元素不赋初值,系统自动赋值0, 只给部分数组元素赋初值

  • 当全部数组元素赋初值时,可不指定数组长度,编译系统可根据初值个数确定数组长度

5.2 二维数组

  • 数组名【行】【列】 元素 = 行*列

  • 存放顺序:按行优先连续存储 , 内存为一维

  • 声明时,若未初始化数组,行列数不可缺省,若初始化数组,行数可缺省

  • 当赋值语句里没有用{}分出行的时候,系统会按照 元素的个数除以列数 来算出每一行的元素个数,如果这时候有缺省值赋值的话,就是依次排列;

  • 当赋值语句里用 {} 分出行,如果这时候缺省值赋值的话,按行补0、二维数组 s1 [ i ] [ j ] , s1[0] → 是第0行的首地址

  • 二维数组存字符串时,每行应以 '\0' 结束,不然输出时,会越界,越界时读取的地址会不确定,非连续读取;

  • 数组名 a 是看做 二级指针 ,用 int *p 接收二维数组首地址时,应该 p = *a 非 p = a ;

    • a == a[0] --> *a == &a[0] [0] --> **a == a[0] [0]

    • 记忆 --> 一个 * 破除 一个 { };

  • a+1 与 a[0]+1的区别

    • a为二级指针,加一的数量级是一排

    • a[0]为一级指针,加一的数量级是一个

  • 二维数组的存储

    • C语言中的二维数组是按行排列的,也就是先存放a[0]行,再存放a[1]行,最后存放a[2]行;每行中的4个元素也是依次存放。数组a为int类型,每个元素占用4个字节,整个数组共占用4×(3×4)=48个字节。C语言允许把一个二维数组分解成多个一维数组来处理。对于数组a,它可以分解成三个一维数组,也就是a[0]、a[1]、a[2]。每一个一维数组又包含了4个元素,比如a[0]包含a[0] [0]、a[0] [1]、a[0] [ 2]、a[0] [3]。

    • 设数组a中第0个元素的地址为1000,那么每个一维数组的首地址如下图所示:

      图3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值