1.数组的概念
数组是一组相同类型元素的集合;
(1)数组中存在的是一个或者多个数据,但是数组元素个数不能为0.
(2)数组中存在的多个数据,类型是相同的。
数据分为一维数组和多维数组,多维数组一般比较多见的是二维数组。
2.一维数组的创建和初始化
2.1数组创建
一维数组创建的基本语法
type arr_name[常量名];
存放在数组的元素被称为数组的元素,数组在创建的时候可以指定数组的大小和数组的元素类型
- type指定的是数组中存放数组的类型,可以是:char、short、int、float等,也可以是自己定义的类型
- arr_name指的是数组名的名字(根据实际情况而定,但也不能乱取,方便理解的)
- [ ]中的常量值是用来指定数组的大小
例子:我们现在储存20人的成绩,就可以用以下格式表示
int math[20] ;//一般数组名可以用英文来表示
2.2数组的初始化
数组在创建的时候,我们需要给定一些初始值,这种就称为数组的初始化。
两种初始化:
int arr[4]={1,2,3,4};//完全初始化
int arr2[4]={1,};//不完全初始化,第一个元素初始化为1,剩余的元素默认初始化为0
int arr3[3]={1,2,3,4};//错误的初始化--初始化项太多
2.3数组的类型
数组也是有类型的,数组是自定义类型,去掉了数组名就是数组的类型
列如:int arr[1];
arr的数组类型是int [1]
3.一维数组的使用
3.1数组下标
C语言规定数组是有下标的,下标从0开始的。假设4数组有n个元素,最后一个元素的下标是n-1,下标就相当于数组元素的编号。
int arr[4]={1,2,3,4};
数组 | 1 | 2 | 3 | 4 |
下标 | 0 | 1 | 2 | 3 |
在C语言中数组的访问提供了一个操作符[ ],这个操作符叫:下标引用操作符,我们可以轻松的访问到数组的元素了,比如我们要访问下标为3的元素,我们可以使用arr[3]
代码操作如下:
#include <stdio.h>
int main()
{
int arr[4]={1,2,3,4};
printf("%d\n",arr[3]);
return 0;
}
输出结果:
3.2数组元素的打印
如果要访问整个数组的内容,该如何操作?
只要我们产生数组的下标就可以了,这时候我们需要用到for循环产生0~9的下标,
代码如下:
#include <stdio.h>
int main()
{
int arr[4]={1,2,3,4};
int i = 0;
for(i=0;i<4;i++)
{
printf("%d",arr[i]);
}
return 0;
}
结果如下:
3.3数组的输入
可以根据需要 ,自己给数组输入想要的数据,如下
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int arr[5]={1,2,3,4,5};
int i = 0;
for(i=0;i<5;i++)
{
scanf("%d",&arr[i]);
}
for(i=0;i<5;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
结果如下:
4.一维数组在内存中的存储
了解数组在内存中的存储
依次打印数组元素的地址:
#include <stdio.h>
int main()
{
int arr[4] = { 1,2,3,4 };
int i = 0;
for (i = 0; i < 4; i++)
{
printf("arr[%d]=%p\n", i, &arr[i]);
}
return 0;
}
结果:
通过结果可以得出,数组随着下标的增长,地址是由小到大变化的,并且每两个相邻的元素之间相差4(一个整型是4个字节)。所以可以得出结论:数组在内存中是连续存放的
5.sizeof计算数组元素个数
sizeof:C语言的一个关键字,是可以计算类型或者变量大小的,当然也可以计算数组大小。
#include <stdio.h>
int main()
{
int arr[5] = { 0 };
int i = 0;
for (i = 0; i < 5; i++)
{
printf("%d\n", sizeof(arr));
}
return 0;
}
结果:
该结果计算的是数组所占内存空间的总大小,单位是字节
因为数组中所有元素的类型是相同的,那只能计算出一个元素所占字节的个数,数组的元素个数就能算出来。我们选择一个元素算大小就可以。
计算一个元素的大小
#include <stdio.h>
int main()
{
int arr[5] = { 0 };
int i = 0;
for (i = 0; i < 5; i++)
{
printf("%d\n", sizeof(arr[0]));
}
return 0;
}
结果:
计算数组的元素个数
#include <stdio.h>
int main()
{
int arr[6] = { 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
printf("%d", sz);
return 0;
}
结果
计算公式:数组个数=数组总字节数/单个数组元素的大小(单位:字节)
6.二维数组的创建
6.1二维数组的概念
数组的元素都是内置类型的,如果我们把一维数组作为数组的元素,这时候就是二维数组
1 | 2 | 3 | 4 | 5 |
2 | 3 | 4 | 5 | 6 |
3 | 4 | 5 | 6 | 7 |
int | int | int | int | int |
6.2二维数组的创建
如何定义二维数组?语法如下:
type arr_name[常量值1][常量值2]
例如:
int arr[4][5];
double data[2][4];
- 4表示数组有4行
- 5表示每一行有5个元素
- int表数组类型,arr数组名
- date数组意思基本一致
7.二位数组的初始化
与一维数组一样,也是使用大括号初始化的。
7.1不完全初始化
int arr1[3][4]={1,2};
int arr2[3][4]={0};
7.2完全初始化
int arr3[3][4]={1,2,3,4, 2,3,4,5, 3,4,5,6};
7.3按照行初始化
int arr4[3][4]={{1,2},{3,4},{5,6}};
7.4初始化时省略行,但不能省略列
int arr5[][4]={1,2,3};
0 | 1 | 2 | 3 | |
0 | 1 | 2 | 3 | 0 |
8.二维数组的使用
8.1二维数组的下标
使用下标的形式对二维数组进行访问
C语言规定,二维数组的行是从0开始的,列也是从0开始的。
列子:访问数字4
#include <stdio.h>
int main()
{
int arr[2][3] = { 1,2,3, 2,3,4 };
printf("%d", arr[1][2]);
return 0;
}
8.2二维数组的输入与输出
如何访问整个二维数组
用循环来实现生成所有的下标
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int arr[2][3] = { 1,2,3, 2,3,4 };
int i = 0;
for (i = 0; i < 2; i++)
{
int j = 0;
for (j = 0; j < 3; j++)
{
scanf("%d", &arr[i][j]);
}
}
for (i = 0; i < 2; i++)
{
int j = 0;
for (j = 0; j < 3; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
2行3列
9.二维数组在内存中的存储
与一维数组一样,可以打印数组所有元素的地址。
#include <stdio.h>
int main()
{
int arr[2][3] = {0 };
int i = 0;
int j = 0;
for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j++)
{
printf("&arr[%d][%d]=%p\n", i, j, &arr[i][j]);
}
}
return 0;
}
列不能忽略的原因:确定内存