数组

1.认识数组

数组是⼀组相同类型元素的集合,数组又分为一维数组多维数组
换句话说,就是同一类型的东西放在一起。

2.一维数组

一维数组指的是只有一个下标的数组,它用来表示一组具有相同类型的数据。

2.1 一维数组的创建

基本格式如下:

type name[常量]

type 表示元素的类型,比如 int 、float 、char 等,也可以是自定义的类型。
name 是数组的名字。
常量相当于指定数组的大小,具体大小根据情况而定。

2.2 一维数组初始化

数组的初始化一般将元素放入大括号中。

int arr1[5]={5,6,7,8,9};  //完全初始化

int arr2[5]={3};  //第一个元素初始化为 3 ,其余元素为 0 (不完全初始化)

int arr[3]={6,7,8,9} ;  //超出容量,只会取前三位(错误初始化)

2.3 下标

比如某数组有 n 位元素,该数组第一位元素下标为 0 ,最后一位的下标就是 n - 1,以此类推······(以 int arr[10]={1,2,3,4,5,6,7,8,9,10}; 为例
数组下标
要想根据下标找到元素也是可以实现的,这里,arr[4]=5 、arr[8]=9

2.4 数组元素的打印

想要打印数组内的元素,可以根据下标进行操作。

#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++)  //利用for语句对下标进行循环,(0~9)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

输出结果:

1 2 3 4 5 6 7 8 9 10

2.5 数组元素的输入

元素的打印用的是下标,输入元素同样可以 根据下标来操作。

#include<stdio.h>
int main()
{
	int arr[10];
	for (int i=0;i<10;i++) //对下标进行循环,依次输入数据
	{
		scanf("%d", &arr[i]);
	}
	for (int j = 0; j < 10; j++) //数组元素的打印
	{
		printf("%d ", arr[j]);
	}
	return 0;
}

输出结果:

2 4 6 7 3 8 4 9 12 45 33 77 62  //输入的数据
2 4 6 7 3 8 4 9 12 45  //打印输出的数据

数组只会读取所需数据的个数,多余的数据会忽略。

3.二维数组

3.1 二维数组的创建

基本格式如下:

type name[常量1][常量2];

二维数组跟一维数组相比,只多了一个常量2。常量1和常量2分别表示数组的

3.2二维数组初始化

二维数组跟一维数组一样,都是在大括号内放入数据。

int arr1[4][2]={3,4,5};  //不完全初始化

int arr2[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; //完全初始化

int arr3[3][5]={{1},{4,5},{7,8}};  //按行初始化

二维数组

初始化时可以省略,但不能省略

3.3 二维数组下标

可以将二维数组的下标理解为数学中的坐标。(行和列下标同样是从 0 开始)
int arr[3][4]={1,2,3,4, 5,6,7,8, 9,10,11,12};

比如,arr[2][2]=11、arr[1][3]=8 。

3.4二维数组的输入和输出

在一维数组中,只用了一个 for 循环,而在二维数组中一个 for 语句显然是不够的。

#include<stdio.h>
int main()
{
	int arr[3][4];  //3行4列
	for (int i = 0; i < 3; i++)   //产生行
	{
		for (int j = 0; j < 4; j++)   //产生列
		{
			scanf("%d",&arr[i][j]);     //输入元素
		}
	}
	for (int i = 0; i < 3; i++)     //产生行
	{
		for (int j = 0; j < 4; j++)    //产生列
		{
			printf("%d ", arr[i][j]);    //输出元素
		}
		printf("\n");
	}
	return 0;
}

运行结果:

3 4 6 7 2 8 33 93 5 74 6 74 64 5    //输入元素个数大于所需数据个数
3 4 6 7
2 8 33 93
5 74 6 74    //共输出12个元素,其余省略

4.数组在内存中的存储

4.1 一维数组

下面就依次打印数组元素地址进行观察。

#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 个字节。

4.2二维数组

二维数组我们继续打印元素地址

#include<stdio.h>
int main()
{
	int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 4; j++)
		{
			printf("arr[%d][%d]=%p\n", i,j, &arr[i][j]);
		}
	}
	return 0;
}

二维数组存储
我们可以发现,arr[0][3] 和 arr[1][0] 这两个换行的位置相差也是 4 个字节 。

一维数组和⼆维数组中的每个元素都是连续存放。

5. 计算数组元素个数

如果想要知道数组元素个数,我们可以先计算数组所占内存空间的总⼤⼩(字节),再计算出⼀个元素所占字节的大小,两者相除就能够得出元素个数。
具体操作如下:

#include<stdio.h>
int main()
{
	int arr[] = {1,2,4,6,7,8,54,87,99};
	int r = sizeof(arr) / sizeof(arr[0]); //总大小/一个元素所占大小=个数
	printf("%d", r);
	return 0;
}

运行结果:

9

这样就可以根据所需灵活使用元素个数的值了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值