在上一篇文章中,简单讲述了猜数字游戏的相关内容。本篇内容会讲解数组的相关内容,走过路过不要错过,对你或许有帮助哦~
1.数组的概念
既然我们要学习数组,那肯定少不了数组的概念,那就简单了解一下什么是数组!
我们的日常生活中肯定会对一些相关的或者相同类型的物品进行分类,举个栗子:易碎品和塑料品。数组其实也就是这个意思,我们把属性相同的元素放在同一个小组里,就形成了数组。
所以总而言之,数组是一组相同类型元素的集合。
从概念中我们可以了解数组中包含的元素至少有一个,不能为0;同时元素类型必须是相同的。
2.数组的创建
了解完相关概念之后,我们来看看数组的结构。
type name[常量值]
type-----表示数组元素的类型
name-----表示数组的名字
[常量值]-----表示数组的大小的
是不是很简单易于理解呢?结合概念我们就可以创建出我们的第一个数组了。例如:创建一个数组存放10个自然数,我么都知道自然数是整数,那就说明数组是整形数组,有10个元素!
int number[10];
同理其他元素初始化也是如此。
char ch[5];
float arr1[5];
double arr2[5];
看是不是很简单呢?创建好数组后,就有人问能不能放一些元素进去?-----答案当然是YES。我们只需要在后面加上一个括号即可(其实就是后面要讲的初始化)。
int arr[10]={1,2,3,4,5,6,7,8,9,0};
3.数组的初始化
在前面讲创建变量的时候,我们给变量初始化过。其实数组的初始化是类似的,只不过数组的初始化需要一个花括号,在花括号内部初始化,有同学估计没有明白我的意思,那就通过代码看看吧。
int num[5]={1,2,3,4,5};
int age[3]={12,15,18};//这就是初始化
但数组初始化也有同变量不一样的地方,就是数组初始化分为完全初始化和不完全初始化。
就如上面的代码,我们创建了大小为10的数组,我们在花括号中将每一个元素都初始化了。这就是完全初始化,每一个元素都被初始化。
那什么是不完全初始化?显而易见就是不把每一个元素初始化,例如我就想只初始化3个,如下:
int arr[10]={1,2,3};//不完全初始化,后面没有初始化的元素默认为0
那如果我一不小心初始化多了它会造成什么效果?------初始化多了系统会报警告(初始化项太多),这个时候我们就要修改大小或者初始化个数。
4.数组的类型
在C语言中,基本上变量大多有类型的,数组也不例外,那么数组的类型是什么呢?也是int、short、float、double类型的吗?-----答案是NO
在C语言中,我们把数组名去掉就是数组类型。
int num[5]={1,2,3,4,5};//去掉数组名剩下int [5]---这就是数组类型
double score [3]={66.5,99.8,87.8};//去掉数组名剩下double [3]----数组类型
char ch[3]={'a','b','c'};//数组类型----char [3]
5.数组的相关用法
5.1 数组的下标
C语言规定数组是具有下标的,下标是从零开始的。譬如对于
int arr[10]={1,2,3,4,5,6,7,8,9,0};
5.2 访问数组元素
在C语言中提供了一种操作符[ ]-----下标引用操作符,我们可以通过[ ]和下标去访问数组的元素。既然可以通过该操作符可以访问元素,那么我们能不能自己输入元素呢?-----答案是肯定的!我们可以通过循环结构结合下标特点实现数据的输入。
既然能输入元素,必然能将每个元素打印出来,道理和上面是一样的!
6.数组在内存中的存储
在上面的代码中,我们能够连续输入10个元素,那我想知道我输入的这10个元素在内存中是怎么分布的呢?那我们就可以把他们的地址打印出来看一下。(打印地址用%p打印)
, 我们可以发现每个地址都相差4,这是因为数组中元素的类型是int类型,int类型是占4个字节的,由此可见我们输入的元素在内存中是连续分布的,即数组在内存中是连续分布!!
7.sizeof计算元素个数
在C语言中,sizeof是关键字,它可以用来计算类型或者元素大小,在C语言入门篇时,我们用sizeof来计算每一种类型的字节大小;在数组中我们可以用来计算数组中的元素个数。那么sizeof该怎么用?
sizeof(类型/元素);
用起来非常的简单,我们知道了代码中arr数组占40个字节是因为有10个整形元素(10*4=40),那我们能不能反过来求数组的元素个数?当然可以啦~
8.二维数组
既然有一维数组,也会有二维数组甚至是三维、四维等等,我们把二维之后的统称为多维数组。
8.1 二维数组的概念
在C语言中我们把一维数组看作二维数组的一个元素,简单通过图示来了解了解
8.2 二维数组创建
创建二维数组之前我们首先要了解二维数组的结构
type name[常数值][常数值];
根据它的结构,我们可以照猫画虎
int arr[3][5];
//3---表示3行
//5---表示5列
//int----表示数组元素类型
double arr1[3][5];
这样就可以创建出二维数组啦!
8.3 二维数组初始化
二维数组初始化分为三种:
1)完全初始化;
int arr[3][5]={1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
2)不完全初始化;
int arr[3][5]={1,2,3};
int arr[3][5]={0};
3)按行初始化
int arr[3][5]={{1,2,3},{4,5,6},{7,8,9}};
特别注意:在初始化过程中,行可以省略,列不可以省略!!!
如果省略列,那么编译器会发出警告!
![](https://i-blog.csdnimg.cn/direct/66c3d954aeea4473b74da26ec981c798.png)
9.二维数组的使用
在一维数组我们通过下标访问操作符[ ]访问数组中的元素,在二维数组中依然是适用的,在使用时我们首先得搞清楚二维数组的下标是怎么一个分布?行、列各自拥有自己的下标,因此如果要输入元素或者打印元素,我们要用到循环的嵌套以及行列标的关系,你观察会发现,第1行有5个元素,第2行有5个元素,第3行有5个元素,由此我们可以得到如下代码:
10.二维数组在内存中的存储
要看二维数组在内存中的存储,首先得知道各个元素的地址,看看二维数组是不是同一维数组一样在内存中时连续分布的。
根据地址,我们可以确定二维数组在内存中也是连续分布的!!!
后面会更新一篇函数,期待一下吧!