学习数组,来这里看看

数组

1、一维数组的创建

数组是一组相同类型元素的集合

数组的创建特别简单:

int 类型的数组:int arr[10]={1,2,3,4,5,6,7,8,9,10};

char 类型的数组:char ch[10]=“abcdef”;

问:如果在[ ]里面 放入的是n可不可以呢?

答:在支持C99标准的编译器下这个创建的方式是可以的,但是在不支持C99标准的编译器下,这个方式是不可以的

具体的例子如下:

image-20220424152619880

image-20220424152704319

可见在创建了这个数组的时候,编译器会报错,因为在这个定义数组大小的时候,中括号内的应是常量表达式

可能大家了解过#define这个与处理指令,在#define这个定义以后,我们就能在数组中使用字母了

image-20220424153145881

2、一维数组的初始化

数组在初始化的时候,有不完全初始化和完全初始化

int arr1[10]={1,2,3,4,5,6,7,8,9,10};//数组大小为10,初始化了10个数,这就被称为完全初始化。

int arr2[10]={1,2,3,4,5};//数组大小为10,初始化了5个数,这就被称为不完全初始化。

问:不完全初始化的时候,那后面的数组的后面几个数被初始化为什么了呢?

答:image-20220424153557904

通过编译器上的监视窗口,我们可以看懂,在进行初始化以后的数组中,1,2,3,4,5之后的空间都被初始化为0,所以我们知道,不完全初始化的时候,会默认放0进去。

3、 一维数组的使用

数组名是什么?

数组名是首元素的地址。//首先记住这句话,接下来我们会慢慢分析到为什么数组名是首元素的地址。

首先我们要定义一个数组,将数组中的内容都打印出来。

这就介绍到数组的使用部分:

语法规定,数组的下标从0开始,就是在一个数组中,有10个数,它的下标从0开始,数组的最后一个数的下标为9,就像这张图里面显示的这样

image-20220424153557904

1放的位置为数组的0号位置 而10放的位置是数组的9号位置

下面我们要来介绍这个[ ]下标引用操作符,这个操作符有两个操作数,一个是数组名,另外一个是索引值,也就是元素所对应的下标。

像在arr2数组中,我们想要找到5这个元素,首先它的下标为4 我们就可以这样打印出来它。

image-20220424154711590

这里面[ ]这个操作符的操作数为arr2 和 4

问:那么我们怎么才能依次打印出一个数组中所有的数据呢?

答:image-20220424155024626

这样我们就能够把0-9号位置上的数据全部打印出来了。

4、一维数组在内存中的存储方式

数组在内存中是怎么存储的呢?

还是先创建一个数组

image-20220424155422675

我们可以看到,0号位置到9号位置,每个位置上的地址,差了十六进制的4,也就是4个字节,是一个整型的大小,我们创建的数组是整型数组,每个整型数据的大小也是4,那样我们就知道,数组在内存中是连续存储的,而且随着数组下表的增长,地址是互换后由低到高变化的。

5、二维数组的创建

二维数组是如何创建的呢?

image-20220424160018001

在二维数组创建的同时,给它进行不完全初始化,可见数组中全部的元素都为0,

在int arr [2 ] [3]={0}中 赋值给0的意思就是,给第一个元素赋值为0,其他的所有元素都默认放0。

在二维数组创建的时候,行可以省略,但是列是一定不能省略的,这是跟二维数组在内存中的存储方式有关的,我在这里提到,下文中的二维数组的使用中会有详细的讲解。

6、二维数组的初始化

二维数组在初始化的时候,可以进行完全初始化,也有不完全初始化,并且,在不完全初始化的时候还有一些特别的地方。

int arr1[2] [3]={1,2,3,4,5,6};//在进行完全初识化的时候,就是把这个数组中的全部空间都给赋值特定的值。

int arr[2] [3]={1,2,3};//就是把第一行的数组全部赋值,但第二行的元素都默认赋值为0.

image-20220424160836997

int arr3[2] [3]={{1,2},{3,4}};//这种是一种特别的初始化方式,在初始化的时候,把每一行的前两个元素给初始化为特定的值,其他的值默认赋值为0.

image-20220424161053370

7、二维数组的使用

在这里会介绍到二维数组在数组中的存储方式和二维数组的使用

首先介绍二维数组的使用

image-20220424162117423

下面就来研究二维数组在数组中的存储:

image-20220424162531703

我们可以看到,这内存中,arr[0] [0]和arr[0] [1]的地址差为4

arr[0] [3] 和arr[ 1] [0]的地址差也为4 那我们就想到了 它们在数组中是同样的存储方式,都是顺序存储,并且也是按着从低到高进行排列的。

总结:

1、一维数组和二维数组在内存中的存储方式都是相同的,都是顺序存储。

2、都是随着数组下标的增长,地址是从低到高变化的。

回答上面留下的问题,为什么二位数组进行初始化的时候,行可以省略,而列不可以省略呢?

答:因为二维数组在内存中的地址排列方式是按行排列的,第一行排列完之后再排列第二行,依次类推。当给出数组的列数时,通过列数与行数的关系,对于这样一个数组,就能找找到特定的地址,从而找到值。

不关心行有多少,要知道每一列有多少个元素。

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值