初识C语言 —— 数组(一)

程序员和上帝打赌要开发出更大更好傻瓜都会用的软件。而上帝却总能创造出更大更傻的傻瓜。所以,上帝总能赢。

一、一维数组

我们会在这里介绍一维数组的各方面知识,无论从表面到内存,还是从定义到使用,希望大家可以有所收获。

1.一维数组的定义和引用

定义:一维数组用以存储一维数列中数据的集合。其一般形式如下:

类型说明符 数组标识符[常量表达式];

①.类型说明符表示数组中所有元素的类型
②.数组标识符表示了该数组型变量的名称,命名规则与变量名一致
③.常量表达式定义了数组中存放的数据元素的个数,通俗来讲就是数组长度

我们可以简单来定义一个数组:

int arr1[5]

代码中的int就是数组元素的类型,而arr1表示的是数组变量名,括号中的5表示的就是数组中包含的元素个数。

数组定义完后,我们就要尝试去使用这个数组。我们可以通过引用数组元素的方式使用该数组中的元素。表示形式一般如下

数组标识符[下标]

例如我们要引用一个数组变量arr1中的第三个变量:

arr1[2];

arr1就是数组变量的名称,2为数组的下标。

注意:数组的下标是从0开始的,也就是说下标为2表示的是第3个数组元素,
而且下标可以是整型常量或者整型表达式。

2.一维数组初始化

对一维数组的初始化,可以用以下三种方法来实现
①.在定义数组的时候直接对数组元素赋初值,例如:

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

这种方法就是将数组中的元素值一次放在一对花括号中。结果上面的定义和初始化之后,数组中的元素arr1[0]=1,arr1[1]=2…arr1[4]=5。

②.只给一部分元素赋值,未赋值的部分元素值为0,例如:

int arr2[10] = { 0, 1, 2, 3};

数组变量arr2包含10个元素,不过在初始化的时候我们只给出了四个值,于是数组中前3个元素的值对于括号中给出的值,其余的值则会被默认为0。

③.在对全部数组元素赋初值的时候可以不指定数组长度,例如:

int arr3[] = { 0, 1, 2, 4, 5}

上述代码的大括号中有5个元素,系统就会根据给定的初始化元素值的个数来定义数组的长度,所以该数组变量的长度就应该是5。

二、二维数组

我们会在这里介绍二维数组的各方面知识,无论从表面到内存,还是从定义到使用,希望大家可以有所收获。

1.二维数组的定义和引用

定义:二维数组地声明与一维数组相同,一般形式如下:

数据类型 数组名[常量表达式1][常量表达式2];

其中,常量表达式1被称为行下标,常量表达式2被称为列下标。假设我们有一个二维数组arr[x][y],我们可以得出一些结论:
①.行下标的取值范围为0~x-1。
②.列下标的取值范围是0~y-1。
③.二维数组的最大下标元素是arr[x-1][y-1]。

例如,我们可以定义一个五行六列的整型数组:

int arr2[5][6]

上述代码是一个数组名为arr2,五行六列的数组,其下标变量为整型。该数组的下标变量一共有5×6个,大家可以尝试去列举一下,在此我们就不一一罗列出来了。

这里还要注意,在C语言中,二维数组是按行排列的,也就是按行顺次存放,先存放arr2[0]行,然后存放arr2[1]行,每行有六个元素,也是依次存放。

粗略了解了二维数组的定义之后,我们还要学会二维数组的引用。
二维数组的引用一般形式如下:

数组名[下标][下标];

和一维数组相同的是,二维数组的下标同样可以是整型常量或整型表达式。

引用二维数组的时候,和一维数组一样,要注意下标越界的问题,例如:

int arr1[3][4];
...
arr1[3][4] = 10;

上述的代码肯定是错误的,首先arr1是一个三行四列的二维数组,那么它的行下标最大就是2,列下标最大值就是3,所以arr[3][4]已经超过了数组的范围,造成了二维数组下标越界访问的错误。

2.二维数组初始化

二维数组和一维数组相同,也可以在声明时对其进行初始化,在给二维数组赋初值时,有以下4种情况:
①.将所有数据写在一个大括号内,按照数组元素排列顺序对元素进行赋值:”

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

如果大括号内的数据少于数组元素的个数,则系统将默认后面未被赋值的元素值为0.

②.分行给数组元素赋值:

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

当然我们也可以只对部分元素赋值,例如:

int arr2[3][3] = {{ 1, 2 }, { 4, 5 }, { 7, 8 }};

③.二维数组也可以直接对数组元素赋值:

int arr3[2][3];
arr3[0][0] = 1;
arr3[1][1] = 2;

这种赋值的方式就是使用数组引用的数组中的元素。

④.为所有元素赋初值的时候,可以省略行下标,但不可以省略列下标:

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

之所以可以这样是以为,系统会根据数据的个数进行分配,一共有六个数据,二数组每行分为3列,当然可以确定数组为2行。

3.二维数组的应用

由于二维数组的应用较为灵活,为了让大家更深入的了解二维数组,我们在这里可以做一道例题:

输入任意一个3行3列的二维数组,求对角元素之和。

这里就直接上代码了:

#include <stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	int sum = 0;
	int arr[3][3];
	printf("请输入:\n");
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			scanf("%d", &arr[i][j]);
		}
	}
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 3; j++)
		{
			if (i == j)
			{
				sum = sum + arr[i][j];
			}
		}
	}
	printf("得到的结果是:%d\n", sum);
	return 0;
}

代码运行结果如下:
在这里插入图片描述
在这个题目种,我们用二维数组保存了一个三行三列的数组,利用双重循环访问数组中的每一个元素,在循环中判断是否是对角线上的元素,最后进行累加计算,得到答案。

三、字符数组

数组中的元素类型为字符串时,称为字符数组。字符数组中的每个元素都可以存放一个字符。字符数组的定义和使用方法与其他类型的数组十分相似。

1.字符数组的定义和引用

定义:与其他数据类型的数组定义类似,一般形式如下:

char 数组标识符[常量表达式]

因为我们要定义的是字符型数据,所以在数组标识符前所用的类型时char,后面括号中表示的是数组元素的数量。

我们可以定义一个简单的数组,例如:

char arr1[5];

其中,arr1就是数组的标识符,5表示数组中包含个字符型的变量元素。

字符串数组的引用与其他类型数据引用是一样的,也是采用下标的形式,在此就不详细展开讲了,大家可以去尝试引用以下,举一反三。

2.字符数组初始化

在对字符串进行初始化操作的时候,有以下三种方法:
①.逐个字符赋给数组中的各个元素:

char arr1[5] = {'H', 'e', 'l', 'l', 'o'};

定义包含五个数元素的字符数组,在初始化的大括号中,每一个字符对应赋值一个数组元素。

②.在定义字符数组时进行初始化,此时可以省略数组长度:

char arr2 = {'H', 'e', 'l', 'l', 'o'}

我们可以看到,虽然代码定义arr2是没有给出数组的大小,但是根据初值的个数还是可以确定数组的长度。

③.利用字符数组赋初值:

char arr3 = {"Hello"};
char arr3 = "Hello";

这里加不加{}并没有什么影响。

3.字符数组的结束标志

在C语言中,使用字符数组保存字符串,也就是使用一个一维数组保存在字符串中的每一个字符,此时系统会自动为其添加“\0”作为结束的标志。
我们来看这样一个数组:

char arr1[] = "Hello";

"\0"其实时C编译系统自动添加上去的,所以上面的赋值语句等价于:

char arr1[] = { 'H', 'e', 'l', 'l', 'o', '\0' };

其实是否添加"\0"应该根据需求来决定。由于系统对字符串常量会自动加一个“\0”,所以,为了处理方法一致,且便于测定字符串的实际长度以及在程序中做相应的处理,所以有时候我们也会人为的添加上一个"\0",这是要注意的。

4.字符数组的输入和输出

字符串的输入输出一般有以下两种方法:
①.使用格式符“%c”进行输入或输出:

for(i = 0; i < 5; i++)
{
	printf("%c", arr1[i]);
}

其中变量为循环的控制变量,并且在循环中作为数组的下标进行循环输出。

②.使用格式符“%s”进行输入或输出:

char arr2[] = "Hello Csdn"
printf("%s", arr2);

这里要特别提醒一下,使用格式符%s将字符串进行输入要注意以下几点:
1.输入字符不包括结束符“\0”
2.如果数组长度大于字符串实际长度,则也只输出到“\0”为止
3.如果一个字符数组包含多个“\0”结束字符,则在遇到第一个“\0”时输出就结束

四、多维数组

多维数组的声明和二维数组相同,只是下标更多,其形式一般如下:

数据类型 数组名[常量表达式1][常量表达式2]...[常量表达式n];

例如,我们声明一个多维数组:

int arr1[3][4][5];
int arr2[3][4][6][8];

在上面的代码中我们分别定义了一个三维数组和四维数组,由于数组元素的位置都可以通过偏移量计算,因此对于三维数组arr1[a][b][c]来说,元素arr1[i][j][k]是从a[0][0][0]算起到(ibc+j*c+k)。

今天的分享暂时就到这里,关于数组我们还有后续的分享,敬请期待哦!望一键三连!
  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Shark-s

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

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

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

打赏作者

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

抵扣说明:

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

余额充值