数组的概念
数组是⼀组相同类型元素的集合;
• 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。
• 数组中存放的多个数据,类型是相同的
数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组
一维数组的创建和初始化
数组的创建
type arr_name[常量值]
type指定数组中存放的数据类型:char short int float等,也可以自定义类型
arr_name代表数组名称,名字根据实际情况自定义,最好有意义(array是数组的英文)
[]中的常量是⽤来指定数组的⼤⼩的,这个数组的⼤⼩是根据实际的需求指定就⾏
如,现在储存20位采访对象的年龄
int age[20];
数组的初始化
有时候,数组在创建的时候,就向数组中填入数据,这种就称为初始化的。
那数组如何初始化呢?数组的初始化⼀般使⽤⼤括号,将数据放在⼤括号中。
数组如果进⾏了初始化,数组的⼤⼩是可以省略掉的。即[]内可不填,
//完全初始化
int arr[5] = { 1,2,3,4,5 };
//不完全初始化
int arr2[6] = { 1 };//第⼀个元素初始化为1,剩余的元素默认初始化为0
//错误的初始化-初始化项太多
int arr3[3] = { 1, 2, 3, 4 };
//省略数组大小的输入
int arr4[]={1,2,3,4};//系统自动检测输入的数据个数记为改数组的大小
初始化项太多,系统会报错
字符数组的初始化
char arr1[] = { "hello world" };
char arr2[] = { 'h','e','l','l','o',' ','w','o','r','l','d' };
数组的类型
数组也是有类型的,数组算是⼀种⾃定义类型,去掉数组名留下的就是数组的类型
int arr1[10];
int arr2[12];
char ch[5];
arr1数组的类型是 int [10]
arr2数组的类型是 int [12]
ch数组的类型是char[5]
int char是数组中元素的类型
int num = 10;
int arr1[] = { 1,2,3 };
printf("%zd\n%zd\n", sizeof(num), sizeof(arr1));
printf("%zd\n%zd\n",sizeof(int), sizeof(int[10]));

sizeof用于计算所占类型的大小,用%zd打印,单位为字节
一维数组的应用
⼀维数组可以存放数据,存放数据的⽬的是对数据的操作
数组下标
C语⾔规定数组是有下标的,下标是从0开始的,假设数组有n个元素,最后⼀个元素的下标是n-1,下 标就相当于数组元素的编号,如下
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
| 元素 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
在C语⾔中数组的访问提供了⼀个操作符 [] ,这个操作符叫:下标引⽤操作符
有了下标访问操作符,我们就可以轻松的访问到数组的元素了,⽐如我们访问下标为7的元素,我们就 可以使⽤ arr[7] ,想要访问下标是3的元素,就可以使⽤ arr[3] ,如下代码:
int main()
{
int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
int arr2[] = { 11,12,13 };
printf("%d,%d\n", arr1[7], arr2[2]);
arr2[2] = arr1[7];
printf("%d,%d\n", arr1[7], arr2[2]);
int a = 0;
for (a = 0; a < 10; a++)
{
printf("%d\n", arr1[a]);
}
return 0;
}

⼀维数组在内存中的存储
依次打印数组元素的地址
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
for (i = 0; i < 10; i++)
{
printf("&arr[%d] = %p\n ", i, &arr[i]);
}
return 0;
}

从输出的结果我们分析,数组随着下标的增⻓,地址是由⼩到⼤变化的,并且我们发现每两个相邻的 元素之间相差4(因为⼀个整型是4个字节)。所以我们得出结论:数组在内存中是连续存放的。
sizeof 计算数组元素个数
sizeof 中C语⾔是⼀个关键字,是可以计算类型或者变量⼤⼩的,其实 sizeof 也可以计算数组的 ⼤⼩。
int arr1[10];
printf("%zd\n", sizeof(arr1));
计算出该数组的大小
int arr1[10];
printf("%zd\n", sizeof(arr1));
int num = sizeof(arr1) / sizeof(arr1[0]);
printf("%d\n", num);
return 0;
通过整个数组的大小除以其中一个元素的大小可以计算出该数组的元素个数

二维数组
二维数组的概念
前⾯学习的数组被称为⼀维数组,数组的元素都是内置类型的,如果我们把⼀维数组做为数组的元 素,这时候就是⼆维数组,⼆维数组作为数组元素的数组被称为三维数组,⼆维数组以上的数组统称 为多维数组
可理解为
一个班级是一个一维数组,学生是其中的元素
一个年级是一个二维数组,班级是其中的元素
一个学校是一个三维数组,年级是其中的元素
二维数组的创建
type arr_name[常量值1][常量值2]
int arr[3][5];
double data[2][8];
• 3表⽰数组有3⾏
• 5表⽰每⼀⾏有5个元素
• int表⽰数组的每个元素是整型类型
• arr是数组名,可以根据⾃⼰的需要指定名字
date数组意思基本⼀致
⼆维数组的初始化
在创建变量或者数组的时候,给定⼀些初始值,被称为初始化。 那⼆维数组如何初始化呢?像⼀维数组⼀样,也是使⽤⼤括号初始化的
直接在大括号内输入元素,可输入最大的个数为行数*列数
元素在同一行按序存储,一行满了后存放在下一行
int arr4[3][5] = {{1,2},{3,4},{5,6}}
这样可以实现按行初始化,分别在第一行,第二行,第三行按序存储
初始化时省略⾏,但是不能省略列
int arr5[][5] = {1,2,3};
int arr6[][5] = {1,2,3,4,5,6,7};
int arr7[][5] = {{1,2}, {3,4}, {5,6}};
⼆维数组的使⽤
其实⼆维数组访问也是使⽤下标的形式的,⼆维数组是有⾏和列的,只要锁定了⾏和列就能唯⼀锁定 数组中的⼀个元素。类似与数学坐标
#include <stdio.h>
int main()
{
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
printf("%d\n", arr[2][4]);
return 0 ;
}
⼆维数组在内存中的存储
像⼀维数组⼀样,我们如果想研究⼆维数组在内存中的存储⽅式,我们也是可以打印出数组所有元素 的地址的。
每⼀⾏内部的每个元素都是相邻的,地址之间相差4个字节,跨⾏位置处的两个元 素(如:arr[0][4]和arr[1][0])之间也是差4个字节,所以⼆维数组中的每个元素都是连续存放的。
2263

被折叠的 条评论
为什么被折叠?



