【C语言初阶(五)】数组

❣博主主页: 33的博客❣
▶文章专栏分类: C语言从入门到精通◀
🚚我的代码仓库: 33的代码仓库🚚

目录

  • 1. 前言
  • 2.一维数组的概念
  • 3.一维数组的创建和初始化
    • 3.1数组的创建
    • 3.2数组的初始化
    • 3.3数组的类型
  • 4.一维数组的使用
    • 4.1数组下标
    • 4.2数组元素打印
    • 4.4数组元素输入
  • 5. 一维数组在内存中的存储
  • 6.sizeof求数组个数
  • 7.二维数组
    • 7.1 二维数组的创建
    • 7.2二维数组初始化
  • 8.二维数组的使用
    • 8.1二维数组的下标
    • 8.2 二维数组的打印
    • 8.3 二维数组的输入
    • 8.4二维数组在内存中的存储
  • 9. 总结

1. 前言

前面我们已经学习了分支和循环,这篇文章我们一起来学习新的知识—数组,数组是一个十分常见的知识,接下来就一起进入数组的学习吧!
本章重点

本篇文章主要介绍数组的概念,一维数组的创建的初始化,一维数组的使用,一维数组在内存中的存储,二维数组的创建和初始化,二维数组的使用等等。

2.一维数组的概念

数组是一组相同类型元素的集合:

数组中存放的是一个或者多个数据,但数组元素不能为0,
数组中存放的多个数据,类型是相同的

3.一维数组的创建和初始化

3.1数组的创建

格式如下:

type arr_name[常量值];

type是指数组的类型,可以是:char、short、int等等。
arr_name是数组名,自定义。
[常量值] 常量值是用来定义数组的大小,自定义。

例如

int a[3];//定义了一个数组a长度为3

3.2数组的初始化

数组在创建的时候,我们需要得定义一些初始值,这种就称为数组的初始化。
那么数组该如何初始化呢?数组的初始化一般用大括号,将数据放在大括号内。数组的初始化又可以分为完全初始化和不完全初始化。
例如:

//完全初始化
int a[3]={1,2,3}
//不完全初始化
int a[5]={1}//第一个元素为初始化为1,其余默认初始化为0

3.3数组的类型

数组也是有类型的,数组算是一种自定义类型,去掉数组名留下的就是数组类型

int a[3]={1}
char b[4]={'1'}

数组a的类型是int [3]
数组b的类型是char [4]

4.一维数组的使用

4.1数组下标

c语言中,数组下标是从0开始,假设数组的长度是n,那么数组的下标最大就是n-1.第1个数组元素可以写为a[0],第2个数组元素可以写为a[1],第3个数组元素可以写为a[2]…那么第n个数组元素就可以写为a[n-1]

4.2数组元素打印

如果要访问整个数组,该如何打印呢?接下来我们通过一段程序来实现

int main()
{
int arr[3]={1,2,3};
int i=0;
for(i=0;i<3;i++)
	{
	printf("%d",arr[i]);
	}
}

4.4数组元素输入

如果要从键盘中输入一个元素,存入数组中,那么又该如何实现呢?

int main()
{
int arr[3]={0};//默认初始化为0
int i=0;
for(i=0;i<3;i++)
	{
	scanf("%d",&arr[i]);//从键盘中输入一个元素,存入数组arr中
	}
}

5. 一维数组在内存中的存储

我们如果想要知道数组在内存中是如何存取的,我们可以通过打印数组中每个元素的地址来看看规律。

int main()
{
	int arr[6] = { 1,2,3,4,5,6};
	int i = 0;
	for (i = 0; i < 6; i++)
	{
		printf("arr[%d]的地址=%p\n",i, &arr[i]);
	}
}

运行结果:

我们会发现a[0]到a[5]的地址依次增大,并且相邻两个数组元素相差4个字节,为什么是4个字节呢那是因为我们定义的元素类型为int类型,int类型的大小就是4个字节。我们就可以得出结论:数组在内存中是连续存放的,且随着下标的增大,数组地址也增大。

6.sizeof求数组个数

在遍历数组的时候,我们经常想知道数组的个数,就可以sizeof操作符来求。
例如:

int main()
{
	int arr[8] = {0};
	printf("%d", sizeof(arr));
}

结果:

个数应该是8个为什么返回32呢?其实是因为***sizeof计算的是数组所栈内存空间的总大小,单位为字节。***如果要计算数组的个数,只需要用 总内存空间/一个元素的内存

int main()
{
	int arr[8] = {0};
	printf("%d", sizeof(arr)/sizeof(arr[0]));
}

结果:

输出结果为8个

7.二维数组

概率:把一维数组作为数组的元素,那么就是二维数组。

7.1 二维数组的创建

定义二维数组格式如下:

type arr_name[常量值1][常量值2];
//例如
int a[3][5];//定义三行5列的数组

7.2二维数组初始化

例如

int arr1[2][3]={1,2,3,4,5,6};//完全初始化
int arr2[2][3]={1,2,3};//不完全初始化,其他值默认为0
int arr3[2][3]={{1,2,3},{4,5,6}};//按照行初始化
int arr4[][3]={1,2,3,4};//初始化的时候行可以省略,但是列一定不能省!!

8.二维数组的使用

8.1二维数组的下标

一维数组的访问需要下标,其实二维数组的访问也需要下标,二维数组是有行有列的,只要确定了行列就可以访问了。

int arr[2][3]={1,2,3,4,5,6};

如下图:

我们可以用arr[1][2]来表示6,我们可以用arr[][1]来表示2

8.2 二维数组的打印

int main()
{
int arr[2][3]={1,2,3,4,5};
int i = 0;
int j = 0;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
	printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
}

8.3 二维数组的输入

前面我们已经学习了一维数组的输入,那么二维数组该怎么输入呢?其实和一维数组很类似。
如下:

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++)
{
	scanf("%d ",&arr[i][j]);
}
return 0;
}
}

8.4二维数组在内存中的存储

在上述内容中我们已经得出结论:一维数组在内存中是连续存放的,且随着下标的增大,数组地址也增大,那二维数组是否也存在这样的规律呢?
我们来进行验证:

int main()
{
	int arr[2][3] = { 1,2,3,4,5 };
	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;
}

结果如下:

我们发现和一维数组一样,二维数组在内存中是连续存放的,且随着下标的增大,数组地址也增大。

9. 总结

本篇文章主要介绍数组的概念,一维数组的创建的初始化,一维数组的使用,一维数组在内存中的存储,二维数组的创建和初始化,二维数组的使用,有想法的同学可以通过本篇文章的知识来完成二分查找,两边向中间输入等关于c语言的学习博主就先告一段了,接下来将进行java的学习,如果同学们想继续深入学习,可以去看看其他博主的文章。

版权声明:本文为博主作者:PU-YUHAN原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/weixin_69049913/article/details/136649950

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2024年4月10日
下一篇 2024年4月10日

相关推荐