【C语言】初识C语言 - 数组

一、一维数组的创建和初始化


1.1一维数组的创建

数组的定义:是一种线性数据结构,用于存储相同数据类型的元素的集合数组中的元素在内存中是连续存储的,并且通过索引来访问。

#include<stdio.h>

int main()
{
	int arr[1] = { 2 };
	//数组数据类型为:int
	//数组名为:arr
	//数组存放元素为:1个
	//存放的元素整型:2,这里的2是直接初始化了
    //不初始化也可以这样写:int  arr[1];
	return 0;
}

注意:在“ [] ”中是常量或者常量的表达式,const修饰的变量不可以使用,因为被const修饰的变量它的本质还是一个变量,下面举例:

下面是数组创建的一些实例:

int main()
{
	//下面是整型数组
	int arr1[3] = { 1,2,3 };//在创建的同时给初始化了
	int arr2[3] = { };//创建了但没有初始化,系统默认初始化全为0
	int arr3[] = { 1,2,3, };//创建了但没有给元素个数,但初始化了
	//以上的表达方式都可以

	//下面是字符数组
	char arr4[5] = { 'a','b','c','d','e' };//创建了一个字符数组,元素个数为5,初始化存入a b c d e
	char arr5[]= { 'a','b','c','d','e' };//创建了一个字符数组,初始化存入a b c d e,元素个数没写系统默认为0
	//这里要强调一点关于字符类型中的“0”对应的ASCII码就是“\0”
	char arr6[5] = {};//创建,没有初始化
	char arr7[] = "abcde";//这是存入字符串,其实就是{ 'a','b','c','d','e' };
	char arr8[2] = { 'a',98 };//这里面的98,其实对应ASCII码的就是字符“b”

	return 0;
}
注意:数组在创建的时候如果想不指定数组的确定的大小就得初始化。数组的元素个数根据初始化的内容来确定。

1.2一维数组的使用

在使用数组时我们需要了解下面两个:

1.数组下标:数组中的元素是连续的,通过下标来找到对应的元素,每一个元素都有自己对应的下标。

2.[]:这个是下标引用操作符,例如arr[2],这个就表示的是在arr数组中下标为2的元素。

下面画图来理解数组下标:

一个整型数组元素有10个,1,2,3,4,5,6,7,8,9,10。对应的下标为0,1,2,3,4,5,6,7,8,9。数组元素下标是从0开始的

int main()
{
	int arr[10] = { 0 };//数组的不完全初始化

	//计算数组的元素个数
	int sz = sizeof(arr) / sizeof(arr[0]);
	//sizeof(arr)是计算整个数组大小的
	//sizeof(arr[0])这里表示计算数组中下标为0元素的大小,就是一个元素的大小
	//用整体的大小除一个元素的大小得到的是数组有多少个元素

	//对数组内容赋值,数组是使用下标来访问的,下标从0开始。所以:
	int i = 0;//做下标
	for (i = 0; i < 10; i++)
	{
		arr[i] = i;
	}
	//输出数组的内容
	for (i = 0; i < 10; ++i)
	{
		printf("%d ", arr[i]);//0,1,2,3,4,5,6,7,8,9
	}
	return 0;
}


1.3一维数组在数据中的存储

我们通过打印数组中每个元素的地址,通过地址来判断数组实在数据中怎么存储的

#include <stdio.h>

int main()
{
	//创建一个数组
	int arr[10] = { 0 };
	
	//计算数组中有多少元素
	int sz = sizeof(arr) / sizeof(arr[0]);

	//开始循环打印数组中每个元素的地址
	int i = 0;
	for (i = 0; i < sz; ++i)
	{
		printf("&arr[%d] = %p\n", i, &arr[i]);
	}
	return 0;
}

        我使用的是32位,这里需要用十六进制来计算,我们可以发现,每个元素对应的地址,相邻的差4,因为定义的是整型数组,所以每个元素的大小就是4个字节。我们得到了数组在内存中的存储时连续的。


二、二维数组的创建和初始化


2.1二维数组的创建

int arr[3][4]
//3表示行,4表示列

 2.2二维数组的初始化

int main()
{
	//3表示的是3行,4表示的是4列,这么计算的话我们这个二维数组应该有12个元素
	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,7,8},{9,10,11,12} };

	//如果只想让每一行的前两个数字初始化可以这样写
	int arr[3][4] = { {1,2,},{5,6,},{9,10,} };
	//这样写和int arr[3][4] = { {1,2,0,0},{5,6,0,0},{9,10,0,0} };是一样的,没有初始化的元素默认为0

	int arr[3][4] = { 1,2,3,4,5 };//未完全初始化,剩余的元素系统默认为0

	//在二维数组中行可以省略,但列不行
	int arr[][4] = { 1,2,2,3,5 };//这样的写法可以
	int arr[3][] = { 1,2,2,3,5 };//这样的写法不行
	//如果你不告诉编译器有几列的话,在一行中可以无限放元素,这样是不允许的

	return 0;
}

注意:二维数组在初始化的时候,列可省略,但行不行。


 2.3二维数组的使用

int main()
{
	//定义一个未完全初始化的二维数组,然后在数组里面放元素
	int arr[3][4] = { 0 };

	//定义变量i,使用i来代表行
	int i = 0;
	for (i = 0; i < 3; i++)//进入for循环依次循环第一行,第二行,第三行
	{
		int j = 0;//定义j来表示列
		for (j = 0; j < 4; j++)//依次进入数组的第i行的第j个元素进行赋值
		{
			arr[i][j] = i * 4 + j;
		}
	}
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 4; j++)
		{
			printf("%d ", arr[i][j]);
		}
	}
	return 0;
}

运行结果如下: 

注意:不论是一维数组还是二维数组,数组下标都是从0开始。在二维数组中第一行第一列的元素下标就是arr[0][0]。


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

我们还是通过打印地址来判断二维数组在内存中是怎样存储的。

我们可以看到其实二维数组在内存中存储也是连续的。

总结:我们可以理解二维数组就是一个一个一维数组拼接起来的一个一维数组

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值