一,数组的概念和特点
数组是存放两个或两个以上相邻储存单元的集合,每个储存单元中存放相同数据类型的数据,而这样的单元也被称为数组元素。
我们将这句话进行拆分,不难发现数组的特点有:
1,数组是存放多个数据的集合,元素的个数不能为0
2,数组元素的存放是相邻的
3,数组中的数据的类型是相同的
二,一维数组
(1)了解一维数组
a,创建
格式:
数组的声明语句及含义,如:
b,初始化
数组的初始化就是给数组赋初始值,将数据放在 {} 里
注意:int arr [] ={1,2,3} 等效于→ int arr [3] ={1,2,3}
数组如果初始化了,可以不规定大小,数组会根据初始化的大小来确定大小
c,数组的类型
数组里的元素有分类型,数组也是有类型的,而数组算是一种自定义类型。数组的类型就是去掉数组名后,剩下的部分(一维数组一般为:元素类型+长度),如:
(2)使用一维数组
使用过程:数组可以用来存放数据,存放后,可以通过数组的下标找到对应的数据
a,数组下标
C语言中,数组的下标是从0开始的,如果有n个元素,则第一个元素的下标为0,最后一个元素的下标为n-1 ,下面举例:
C语言中 [ ] 是“下标引用操作符” ,比如:arr [5]; 就是访问下标为5的元素;arr [0];就是访问下标为0的元素(即第一个元素)
b,输入与打印
当我们需要依次给数组输入数据时我们可以利用for循环和scanf函数,如:
输入:
输出同理:
c,储存
这里主要讲下数组的元素在内存中储存的特点:
我们先用一下代码来依次打印出一维数组里元素的地址:
得到:
由上述打印出的地址,我们可以得出,数组在内存储存的特点是:
1,数组随下标的增长,地址由小变大
2,并且每两个相邻的元素之间相差4(即一个整形的大小:4个字节)
三,二维数组
(1)了解二维数组
如果我们把一维数组当做数组的元素,那么此时创造的就是二维数组;把二维数组当元素,那创造的就是三维数组,依次类推,二维数组以上的统称为多维数组。
a,创建
b,初始化
同样是用{}将数据括起来,初始化的规则是:先放完一行,再放下一行
(2)使用二维数组
a,数组下标
二维数组的行和列下标也是从0开始的,都有第0行,第0列
对于: int arr3 [3] [5] ={1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
比如我们使用arr[2] [4] 就代表第2行,第4列,我们就能快速的找到7
b,输入与打印
我们可以利用for的嵌套,先产生第一行,然后再遍历行,再产生第二行,再遍历,以此类推
输入:
c,储存
用同样的打印方法,我们来观察二维地址的特点:
不难发现,和一维数组所得出的结论应该一致:
1,数组随下标的增长,地址由小变大
2,并且每两个相邻的元素之间相差4(即一个整形的大小:4个字节)
四,C99中的变长数组
一般来说,数组的大小指定只能使用常量,常量表达式,或直接初始化而省略大小:
但是C99给了一个变长数组,让我们能使用变量指定数组大小,如:
上面的arr就是变长数组,它的长度由n决定,编译器无法事先知道,只有当运行时,才能知道arr的长度,好处就是我们可以根据自己所需比较精准,方便的给数组分配长度。(但是在vs中是不支持变长数组的)