一、数组的概念
数组是一组相同类型的元素的集合。
(数组分为一维数组和多维数组,多维数组常见的是二维数组)
(1)数组中可以存放一个或多个数据,但是元素个数不能为0。
(2)数组中元素类型是一致的。
二、一维数组
1.一维数组的创建
//基本语法
type arr_name[常量值];
数组中存放的值就是数组的元素,也可以自己定义数组的类型和长度。
(1)type指的是数组的类型,可以是int,char,float,short,也可以是自定义的类型。
(2)arr_name指的是数组名,根据自己的需求定义数组名即可。
(3)[ ]中的常量值用来定义数组的长度,根据实际需求定义即可。
举例:
//假如我们想存储某班级30人的数学成绩
int score[30];
//创建其他类型和大小的数组
char name[10];
double class[8];
2.一维数组的初始
数组初始化一般用大括号,把元素放里面。
举例:
//完全初始化
int a[5]={1,2,3,4,5};
//不完全初始化
int b[5]={1}; //这种初始化表示的是,数组中第一个元素是1,其他元素都为0
//错误的初始化方式
int c[3]={1,2,3,4}; //初始化的项太多,数组中长度是3,但是却初始化4个元素
3.数组的类型
数组也是有类型的,数组算是一种自定义类型,去掉数组名就是数组的类型。
举例:
int arr1[5];
int arr2[8];
char arr3[12];
arr1的数组类型是int [5]
arr2的数组类型是int [8]
arr3的数组类型是int [12]
4.一维数组的使用
(1)数组下标
数组的下标是从0开始的,假如数组有n个元素,那么下标是从0到n-1的,下标就相当于是元 素的编号。
举例:
int arr1[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语言中数组访问提供了一个操作符[ ],这个符称为下标引用操作符。如果我们要访问下标为
6的元素,用arr[6]。
举例:
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%d\n", arr[6]);
printf("%d\n", arr[8]);
return 0;
}
(2)数组元素的打印
打印数组的元素我们只需要产生所有数组的下标,我们可以采用for循环。
举例:
#include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
(3)数组的输入和输出
输入跟输出的原理相同,都是通过for循环产生所有数组元素的下标。
举例:
#include<stdio.h>
int main()
{
int arr[10];
int i = 0;
for ( i = 0; i < 10; i++)
{
scanf_s("%d", &arr[i]);
}
for ( i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
5.一维数组在内存中的存储
(1)数组随着下标的增长,地址是从小变大的。
(2)数组中每两个相邻的元素差4(因为整型元素是4个字节)。
(3)数组在内存中是连续存放的。
举例:
#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;
}
三、二维数组
1.二维数组的概念
如果我们把一维数组作为数组的元素,那么数组被称为二维数组。
(二维数组以上的数组被称为多维数组)
1 | 2 | 3 | 4 | 5 |
一维数组
1 | 2 | 3 | 4 | 5 |
2 | 3 | 4 | 5 | 6 |
3 | 4 | 5 | 6 | 7 |
二维数组
2.二维数组的创建
定义语法:
type arr_name[常量值1][常量值2];
(1)type就是数组的类型,跟一维数组相同。
(2)arr_name就是数组名字。
(3)常量值1:表示的是数组有几行。
(4)常量值2:表示的是数组有几列(也就是一行有多少个元素)。
举例:
int arr1[ 3 ] [ 5 ];
double arr2[ 2 ] [ 8 ];
3.二维数组的初始化
(1)不完全初始化
int arr1[ 3 ] [ 5 ]={1,2};
(2)完全初始化
int arr3[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
(3)按照行初始化
int arr4[3][5] = {{1,2},{3,4},{5,6}};
(4)初始化可以省略行,但是不能省略列
①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}};
4.二维数组的使用
(1)数组的下标
二维数组的访问也是使用下标形式的,只要确定了行和列就能锁定数组中的一个元素。
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
根据图中所示,蓝色表示行号,橙色表示列号。
举例:
#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", arr[1][4]);
return 0;
}
(2)二维数组的输入和输出
其实二维数组的输入和输出与一维数组的输入输出的中心思想是一样的,都是通过循环,产
生所有的下标,只不过二维数组需要用到循环的嵌套。
举例:
#include<stdio.h>
int main()
{
int arr[3][5];
int i = 0;
int j = 0;
//输入
for (i = 0; i < 3; i++) //产生行号
{
for (j = 0; j < 5; j++) //产生列号
{
scanf_s("%d", &arr[i][j]);
}
}
//输出
for (i = 0; i < 3; i++) //产生行号
{
for (j = 0; j < 5; j++) //产生列号
{
printf("%d", arr[i][j]);
}
printf("\n");
}
return 0;
}
5.二维数组在内存中的存储
(1)每一行的元素都是相邻的,之间相差4个字节(因为整型是4字节)。
(2)跨行处的两个元素之间也是相差4个字节,因此二维数组的元素是连续存放的。
举例:
#include<stdio.h>
int main()
{
int arr[3][5];
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 5; j++)
{
printf("arr[%d][%d]=%p\n", i, j, &arr[i][j]);
}
}
return 0;
}