【手把手带你入门】数组的创建与使用(超详细解释,包括数组传参以及数组名的理解)

在这里插入图片描述

一维数组的创建和初始化

数组的创建

数组是一组相同类型元素的集合。
在这里插入图片描述

数组的创建方式如下:
在这里插入图片描述
如果直接运行代码,会发现程序会报错或者警告:
在这里插入图片描述

将上面这段代码进行调试:
在这里插入图片描述

注意,这里的数组元素个数必须为常量表达式:
在这里插入图片描述
在这里插入图片描述
在 C99 之后以上代码才允许运行通过,成为变常数组。

数组的初始化

数组的初始化即指:在创建数组的同时,给数组的内容一些合理的初始值。

我们在对数组进行初始化时用 { } 。
在初始化数组时要注意一下两种写法的区别:
在这里插入图片描述
但是当指定了数组的大小时,就不能给出比指定的个数更多的元素了:
在这里插入图片描述

字符数组的初始化

在对字符数组进行初始化时,有以下三种方式:
在这里插入图片描述
前面提到,数组在不进行初始化时,编译器默认放入随机值,但是如果是作为全局变量的数组,在不进行初始化时,数组中的元素默认放的是0。
在这里插入图片描述

一维数组的使用

在了解了数组的创建和初始化之后,以及结合前面在
【手把手带你入门】初识C语言(下)
中的介绍,我们对于一维数组的使用应该已经大致掌握。

对于数组的使用,我们用下标对数组进行访问

即: 数组名[ 下标 ]
例:arr[0] 访问arr数组中的第一个元素

而语法规定,数组的下标是从 0 开始的,如果我们要对数组中的元素进行访问,就要用到的是下标引用操作符:[ ],即对数组进行访问的操作符。

当我们知道数组的访问方式之后,我们可以访问其中的某个元素,也可以利用下标将数组中的元素打印出来。
在这里插入图片描述
在这里插入图片描述
但是这里的下标的数值是固定死的,如果我们对数组arr进行更改,加入了更多的元素,该代码还是只打印前十个元素。

所以这时候,我们可以用一个表示元素个数的变量来完成:
在这里插入图片描述
如果把数组稍作修改,该代码依然能完美打印数组中的每一个元素。
在这里插入图片描述
当然,我们以上的例子都是整型数组,但是实际上数组可以有很多种类型,如浮点型数组(数组元素的类型是浮点型)、结构体数组(数组元素的类型是就结构体类型)等等。

一维数组在内存中的存储

那么,一维数组在内存中到底是如何存储的呢?
接下来,我们通过一段代码来探讨:

首先猜测:数组的元素在内存中是连续存放的。

那么如果我们想知道它在内存中的布局是如何的,我们只需要把数组中的内一个元素的地址打印出来。
在这里插入图片描述
所以由此我们可以画出下图,并得出结论。
在这里插入图片描述
如果你觉得文章有用,记得点赞收藏关注一波哟!你的鼓励将是我巨大的动力!

二维数组的创建和初始化

接下来我们来看看二维数组的创建和初始化,二维数组其实是和一维数组非常相似的,但是它也有一些特别之处,下面我们一起来看看。

二维数组的创建

二维数组的创建其实就是比一维数组多了一维,这里大家可以类比一维坐标系和二维坐标系:一维坐标系的变量只有x,而二维坐标系的变量有x和y。

例如:

int arr[3][5];
char ch[5][6];
double d[4][7];

那么二维数组和一维数组到底有什么区别呢?
对比一维数组,我们可以通过画图来进行理解。
在这里插入图片描述
可以看到,一维数组通过画图表示出来就是一行,而二维数组在内存中则是多行的。

二维数组的初始化

同理,二维数组的初始化也是通过{ }来实现的。

第一种初始化

int arr1[3][5]={
   1,2,3,4,5,6,7,8,9,10,11};

画图如下:
在这里插入图片描述
从上图可以看出,初始化的值将依次一行一行地填入数组中,未进行初始化的部分则默认初始化为0。

第二种初始化

我们知道,一维数组就是只有一行的数组,而二维数组就是有多行的数组,因此,我们可以将二维数组看成是多个一维数组的组成,此时,我们可以这样对二维数组进行初始化:

int arr2[3][5] = {
    {
   1,2,3},{
   4,5},{
   6} };

我们可以通过调试来看看这些元素在内存中的存放。
在这里插入图片描述
我们依然画个图来看看~
在这里插入图片描述
我们知道,一维数组在初始化之后,元素个数可以省略掉,那么二维数组可省略吗?
在这里插入图片描述
所以对于二维数组,在初始化之后,行可以省略,而列不能省略。如果不对数组进行初始化,则行和列都不能省略。

二维字符数组的初始化

二维字符数字的初始化有一下几种:

char ch1[4][6] = {
    'a',&#
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值