详细讲解C语言6(C语言系列)

目录

前言:

数组:

一维数组:

语法结构:

数组的初始化:

一维数组的存放方式:

二维数组:

数组的创建:

二维数组的初始化: 

打印二维数组中的元素:

二维数组在数组中的存储:

数组名是什么? 

结束语:


前言:

这节博客中小编将主要和大家分享一下数组方面的知识,由一维数组到二维数组,让我们来一点一点深入了解吧!

数组:

简单理解一下就是一组相同类型元素的集合。

一维数组:

语法结构:

type_t arr_name[const_n];

type_t:是指数组的元素类型。

arr_name:是指数组元素的名字。

const_n:是一个常量表达式,用来指定数组的大小。

数组的初始化:

数组的初始化可以分为完全初始化和不完全初始化。

下面代码中我们分别对整形数组和字符型数组进行了完全初始化和不完全初始化。

#include<stdio.h>
int main()
{
	//整形数组初始化
	int arr[5] = { 1,2,3,4,5, };//完全初始化
	int arr[5] = { 1,2,3 };//不完全初始化
	int arr[] = { 1,2,3 };//[]里面的内容可以省略
	//字符数组初始化
	//方法一:
	char arr1[5] = "abcd";//完全初始化s
	char arr2[5] = "abc";//不完全初始化
	//方法二:
	char arr3[5] = { 'a','b','c','d','e' };//完全初始化
	char arr4[5] = { 'a','b','c' };//不完全初始化
}

一维数组的存放方式:

一维数组在内存中是连续存放的,我们可以通过打印出数组的地址来得出结论。

代码如下所示:
 

#include<stdio.h>
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	int i = 0;
	for (i = 0; i < 5; i++)
	{
		printf("&arr = %p\n", &arr[i]);//%p是指以地址的格式来打印(十六进制的打印)
	}
	return 0;
}

代码运行结果截图如下所示:

注意:

1. 其中%p是以十六进制的地址格式打印的,且我们在上面定义的是整形数组,所以两个相邻的地址之间相差4个字节。

2.而且我们还可以得出随着数组下标的增长,地址是由高到底变化的。

3.数组名是数组首元素的地址。

二维数组:

数组的创建:

二维数组的初始化: 

对于二维数组而言我们有两种初始化方法,具体见代码所示。

#include<stdio.h>
int main()
{
	//初始化方法一:
	int arr[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };//完全初始化
	int arr[3][4] = { 1,2,3,4,5,6 };//不完全初始化
	//初始化方法二:
	int arr[3][4] = { {1,2},{3,4},{5,6} };
	int arr[][4] = { {1,2},{3,4},{5,6} };
	//二维数组初始化的时候前面[]里面的内容可以省略
	//即行可以省略但是列不可以省略
}

打印二维数组中的元素:

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

代码截图如下所示:

 注意:上述二维数组为不完全初始化,所以在没初始化的地方为默认为0。

二维数组在数组中的存储:

二维数组在内存中的存储和一维数组的存储是一样的也是连续存放的,以arr[3][4] = {1,2,3,4,5,6,7,8}为例:

数组名是什么? 

之前我们在一维数组的介绍中提到过数组名是数组首元素的地址,但是其中还有两个例外:

1.sizeof(数组名):数组名表示整个数组,计算的是整个数组的大小,单位是字节。

2.&数组名:数组名表示整个数组,取出来的是整个数组的地址。

我们可以直接通过代码来具体感受一下:
代码如下所示:

#include<stdio.h>
int main()
{
	int arr[3] = { 1,2,3 };
	int sz = sizeof(arr);
	printf("%d\n", sz);
	int i = 0;
	printf("\n&arr = %p\n", &arr);
	printf("\n&arr = %p\n", &arr+1);
	return 0;
}

代码运行截图如下所示:

代码结果分析:

1.第一排输出的是12,因为我们定义的是整形数组,一共是三个数,一个数占四个字节所以一共占12个字节,所以说对于sizeof(数组名)时,数组名表示整个数组,计算的是整个数组的大小。

2.第二排和第三排是数组地址的输出,当我们用&数组名时我们可以通过&数组名+1来计算出它下一个数组的地址,两者之间相差12,从而得出我们所取出来的是 数组的整个地址,所以说对于&数组名中数组名表示整个数组,取出来的是整个数组的地址。

结束语:

这次小编主要和大家分享了一维数组和二维维数组方面的知识,关于数组方面的一些具体应用小编下次将会继续和大家分享的,希望对大家有所帮助,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力敲代码的小白✧٩(ˊωˋ*)و✧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值