C语言:数组

目录

一、数组的概念

二、数组的创建

1.一维数组

2.二维数组

三、数组的类型

四、数组的初始化

1.一维数组

2.二维数组

五、数组的使用

1.一维数组

1.1一维数组的下标

​编辑 1.2一维数组的打印

1.3一维数组的输入

2.二维数组

2.1二维数组的下标

2.2二维数组的打印与输入

六、数组在内存中的存储

七、sizeof作用


一、数组的概念

数组是一组相同类型元素的集合。数组中可以有一个或多个数据,且这些数据的类型相同。

数据可以分为一维数组和多维数组,多维数组常见的是二维数组。

二、数组的创建

int a[4];

1.一维数组

一维数组的创建:
 

type name[大小]; 

type表示数组的类型,常见的如:char、int、float等,也可以是自定义的类型。

name表示数组的名称,可以自定义。

[大小]表示数组的大小,根据需要自行定义大小,但要注意数组的大小可以超过使用的数据数,但不能少于使用的数据数。

例:

int a[5];

2.二维数组

type name[大小][大小];

type表示数组的类型,常见的如:char、int、float等,也可以是自定义的类型。

name表示数组的名称,可以自定义。

[大小][大小]表示数组的大小,第一个[大小]表示数组的行,第二个[大小]表示数组的列

例:

int a[2][3];//一个二行三列的数组


int b[3][5];//一个三行五列的数组

三、数组的类型

数组是一种自定义类型,去掉数组名剩下的就是数组的类型。

int a[5];
int b[10];
char c[5];

a数组的类型是int [5]

b数组的类型是int [10]

c 数组的类型是char [5]

四、数组的初始化

 在数组创建时给定一些初始值,叫做数组的初始化。数组的初始化一般使用大括号,把初始化的值放在大括号内。

1.一维数组

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

//不完全初始化
int b[5]={1,2,3,4};//数组中未初始化的数默认为0.

//错误初始化
int c[5]={1,2,3,4,5,6};
//初始化的值超过数组大小会报错

2.二维数组

//不完全初始化
int a[3][5]={1,2};//数组的初始化会优先从第一行开始初始化
int b[3][5]={1,2,3,4};//如果初始化的值超过第一行的数组的大小,会先排满第一行。
                      //再从第二行开始初始化,以此类推。

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


//初始时可以省略行,但不能省略列
int d[][5]={1,2,2,3,3,5};//这个数列就没有定义行,但初始化的数超过数组的列,有两行,计算机默认该数                    
                         //组有两行。如果省去列就无法判断数组有几行。


//不完全定义行的初始化
int e[3][5]={{1,2},{3,4},{5,6}};//在数组的初始化中如果用{}包括部分数,表示一行数组,示例数组的第一行是1,2,0,0,0,第二行是3,4,0,0,0,第三行是5,6,0,0,0.

五、数组的使用

1.一维数组

1.1一维数组的下标

C语言中数组有自己的下标,每个数组的下标都从0开始,按照自然数的顺序排列。

int a[10]={1,2,3,4,5,6,7,8,9,10};

上面的数组中1的下标就是0,10的下标就是9。

 1.2一维数组的打印

一维数组单次只能打印一个元素,如果需要打印全部数组,通常用到循环产生所以下标再打印数组。

#include<stdio.h>
int main()
{
	int a[10] = { 1,2,3,4,5,6,7,8,9,10 };//创建数组
	//循环打印
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", a[i]);
	}
	return 0;
}

1.3一维数组的输入

与数组的打印相同,数组的输入也需要访问相应的下标。

#include<stdio.h>
int main()
{
	int a[10] = {1,2,3,4,5,6,7,8,9,10};//创建数组
	//循环输入
	for (int i = 0; i < 10; i++)
	{
		scanf("%d", &a[i]);
	}
	//循环打印
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", a[i]);
	}
	return 0;
}

2.二维数组

2.1二维数组的下标

C语言规定二维数组的行和列都是从0开始的自然数

	int a[3][5] = { 1,3,5,7,9,2,4,6,8,10,1,2,3,4,5 };
下标01234
013579
1246810
212345

上面的表格中绿色的部分表示二维数组的小标,黄色部分表示二维数组相应下标中储存的数。 

2.2二维数组的打印与输入

如果只是打印单个数,只需打印相应数的下标即可:

#include<stdio.h>
int main()
{
	int a[3][5] = { 1,3,5,7,9,2,4,6,8,10,1,2,3,4,5 };
	printf("%d", a[2][3]);
	return 0;
}

 

如果要访问整个数组,也是需要利用循环产生所有的下标。

#include<stdio.h>
int main()
{
	int a[3][5] = { 1,3,5,7,9,2,4,6,8,10,1,2,3,4,5 };
	printf("输入数组\n");
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 5; j++)
		{
			scanf("%d", &a[i][j]);
		}
	}
	printf("打印数组\n");
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 5; j++)
		{
			printf("%d ", a[i][j]);
		}
		printf("\n");
	}
	return 0;
}

 

六、数组在内存中的存储

数组在内存中的存储,随着下标的增长,地址是由小到大的,且地址都是同一时间创建的,相邻且递增。多维数组是一行一行创建的,上一行末尾和下一行的开头地址也是相邻的。

#include<stdio.h>
int main()
{
	printf("一维数组");
	int a[5] = { 1,2,3,4,5 };
	for (int i = 0; i < 5; i++)
	{
		printf("a[%d]的地址为%d\n",i, &a[i]);
	}
	int b[2][3] = { 1,2,3,4,5,6 };
	printf("二维数组\n");
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			printf("b[%d][%d]的地址为%d\n", i,j, &b[i][j]);
		}
	}
	return 0;
}

从输出结果看不管是一维数组还是二维数组,其地址都是相邻且递增的,每个地址之间相差4个字节,因为数组是用int定义的,int在内存中的字节就是4。 

七、sizeof作用

sizeof是C语言的一个关键字,可以用来计算类型或变量的大小,数组大小的计算常使用sizeof。

sizeof需要的占位符是"%zd"。

注:sizeof计算的结果单位是字节。

例:

#include<stdio.h>
{
    int a[5];
    printf("%zd",sizeof(a));
    return 0;
}

上面的代码运行结果为20,上面的代码创建了一个大小为5,类型为int的数组,一个int的字节是4,所以打印的结果是20。

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值