初识数组,详解

首先,我们要知道数组是什么,数组其实是一组相同类型元素的集合,用于存储若干相同元素

下面将分别介绍一维数组,和二维数组的相关知识。

一维数组

一维数组的创建:type_t   arr_name [const_n];

  1. 其中 type_t 是数组存储元素类型,如int、char等
  2. 而 arr_name 是数组名,可由我们自己命名
  3. const_n是 一个常量表达式,用于指定数组的大小

一维数组的初始化数组的初始化分为:完全初始化、不完全初始化、不初始化,元素由{}包裹起来,各个元素之间由英文下的逗号隔开

完全初始化:顾名思义,数组初始化时为,所有的元素赋值

例如:

 不完全初始化:与其相对应,在数组初始化时,仅为部分元素赋值

例如:

 值得注意的是,对于整形数组,未初始化的元素默认存放的是0;对于字符型数组,未初始化的元素,则默认存放的是空,即’0‘ 

不初始化:同理,即为在数组初始化时,不为任何一个元素赋值

例如:

 要注意的是,不初始化的数组,一定要指定数组的大小,且此时数组内存储的元素为随机值;完全初始化数组和部分初始化数组,在初始化的时候可以不指定数组大小,此时数组大小由数组存储的元素个数决定。

一维数组的使用:

 一维数组的使用是通过下标操作符:[ ] 来访问的,以达到使用数组内元素的目的。我们需要知的是, 数组的下表操作符的下标是从0开始的,然后依次加1。

例如:

 一维数组在内存中的存储:

一维数组在内存中的存储是连续的,从首元素到最后一个元素,地址由低到高,各个地址间相差所的大小为存储元素的类型所占的字节数。

例如:对于整形数组,相邻元素的地址间相差4

对于字符型数组,相邻元素的地址间相差1

 二维数组

二维数组的创建:type_t   arr_name [rol][col];

与一维数组相比较,二维数组的创建需要指明行和列,其中,第一个方括号中的row为二维数组的行数,第二个方括号中的col为二维数组的列数。此外,二维数组共有row*col个元素。

二维数组的初始化:

与一维数组相同,二维数组的初始化也分为: 完全初始化、不完全初始化、不初始化,元素由{}包裹起来,各个元素之间由英文下的逗号隔开。但和一维数组不同的是,二维数组的初始化方式要多出一种,下面就让我们来一起看下吧。

完全初始化: 

可以看到,第一种初始化方式,与一维数组相同,元素由外边的一个{}包裹起来,各个元素之间由英文下的逗号隔开。而第二种初始化方式中,不仅外边有着{},而且{}的里面还有着其他{}。

关于第一种初始化方式,我们知道该数组是3行3列的二维数组,数组中的元素是按照一定先后顺序往数组里面放元素,从左往右看,每当放满一行元素后数组换到下一行继续放元素。

而关于第二种初始化方式,里边的{}中的元素,分别为一行的元素,即中间每一个{}都代表单独占有一行,实际上这种初始化的方法要比第一种要好很多,能更清楚的知道数组的每行元素有哪些,所以一般我们会使用这种初始化的方法。

最后关于第三种,我们会发现,其初始化省略了数组的行的大小,而这种初始化的方法是正确的,在二维数组当中,初始化数组可以省略行,但是要注意的是,一定不能省略列的大小,因为,行的省略可以由列的大小来确定其大小,但列的省略却不可以由行的大小来确定其大小。

不完全初始化:

作为不完全初始化,由上面知道,每当放满一行元素后数组换到下一行继续放元素。

第一种初始化方法第一行元素为:1,2,2,第二行元素为:3,3,4,而作为整形数组,剩余未初始化元素默认为0,即第三行元素为:0,0,0

同样的,作为整形数组,第二种初始化方法剩余未初始化元素也默认为0,第一行元素为:1 ,2, 0,第二行元素为:2,3,4,第三行元素为:3,4, 0。看懂了上面的的小伙伴们这个是不是就很简单了呢

 不初始化:

 而对于不初始化的数组,我们要特别注意,一定要给定数组的行数和列数大小,这里的行和列的大小都不能省略,否则编译器将会报错,不能运行。

二维数组的使用:

我们了解了一维数组的使用,二维数组的使用就应该不难理解了,它是通过下标操作符:[ ] 来访问的,我们知道相比于一维数组,二维数组要区分行和列,也就是说,我们要分别通过前后两个下表操作符 [ ] 来访问数组的行数和列数,并且行和列的下标也都是从0开始,依次加1,所以就不难理解 

arr[i+1][j+1]表示二维数组的第 i 行第 j 列的元素

例如:

 二维数组在内存中的存储:

与一维数组相同,二维数组在内存中的存储也是连续的,从左往右,由上至下,依次从第一行首元素到最后最后一行最后一个元素,地址由低到高,各个地址间相差所的大小为存储元素的类型所占的字节数。

例如:

 数组的越界

最后再来谈一谈数组越界的问题,那什么是数组的越界呢?经过上面的讲解,我们知道数组的访问是通过下表访问操作符 [ ] 来访问的,而数组的下标是有一定的范围限制的,例如一个存储n个元素的数组,其第一个元素下表是0,最后一个元素下标是n-1,其下表范围应是:0到n-1之间,而一旦超出这个范围,超出数组合法访问的空间,就被称为数组的越界。

值得一提的是,C语言本身不做数组下标越界的检查,所以如果代码中有数组越界的错误,编译器也一般不会报错,但是编译器不报错不意味着程序是正确的,所以我们在写关于数组的代码时,一定要做好数组是否有越界的检查。

非常感谢能够看完的小伙伴们,如果感觉有帮助的话,能不能点个赞支持一下呢,谢谢啦!

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值