从零开始学习C语言丨最基本的数据结构——数组

从零开始学习C语言丨最基本的数据结构——数组这篇文章来和大家聊一聊C语言中又一个重要的知识点,数组。首先,大家知道程序是由什么组成的吗?有人说,程序=CtrlC+CtrlV。当然,这是大家

大家好,欢迎来到IT知识分享网。

这篇文章来和大家聊一聊C语言中又一个重要的知识点,数组。

从零开始学习C语言丨最基本的数据结构——数组

首先,大家知道程序是由什么组成的吗?

有人说,程序=CtrlC+CtrlV。当然,这是大家调侃的说法。

大多数人认可的是,程序=算法+数据结构

程序本质上是为了帮助人们更好地解决问题。算法属于逻辑部分,是解决问题的步骤;数据结构属于存储部分,用来存储解决问题的工具。

例如,我们做菜。算法就是放多少盐、火候怎么控制、怎么炒等步骤;数据结构则是用来存放菜刀、油盐酱醋等工具的橱柜。二者相辅相成,缺一不可。

数组,是最基本、也是最常用的数据结构。是用来存储固定大小、相同类型元素的顺序集合。

学好数组,再去学习算法与数据结构会有着很大的帮助。

数组声明

在前面学习数据类型中,知道数组是属于构造类型中的一种。既然作为一种数据类型,数组自然是需要声明,才会被编译器所识别使用。

数组声明需要提供数组中元素的类型,数组变量的名称以及数组大小。

int arr[10];

这里声明了一个 int 类型,变量名为 arr,长度为 10 的整形数组。

声明后的 arr 数组中只能存放 int 类型的数据,不能是 char、float、double 等其他类型。同时,只能存放不超过 10 个 int 类型的数据。

数组在声明之后要怎么把数据填入呢?

一种是声明时并进行初始化赋值,另一种是通过索引值赋值。

// 初始化赋值
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 索引赋值
int arr[10];
arr[0] = 1;
arr[1] = 2;
...

在生活中,谈到顺序,我们都是默认从 1 开始的。但是在计算机中,索引顺序是从 0 开始的,也就是数组相应位置对应的索引值,实际上是 n-1。

为什么索引值从 0 开始?

这边我找到了三种解释,有说是为了节省内存空间的,在之前内存是一个非常稀罕的东西。

假设有 4 个数据要存入,索引值从 1 开始,对应的二进制是(1,10,11,100);从 0 开始的索引,对应的二进制是(0,1,10,11)。

如果从 1 开始,要比从 0 开始多耗费 1 个 bit 的内存,这对于当时内存极为稀缺的年代是不能被接受的。沿至今日,即便内存便宜了,但是大家也沿袭了这个习惯。

至于其他的说法,还有从硬件层面作出解释,以及上届、下届差值的说法。有兴趣的,大家伙儿可以自行去了解。

数组最大的优点就是支持随机访问,即当你想要访问数组中某个数值,只要知道这个数值在数组中的哪个位置,就可以知道它对应的索引值(n-1),通过索引值就可以直接使用这个数值。

int arr[3] = {1, 2, 3};
int a = 2, c;
c = a + arr[1]; // 4

但数组也有缺点,那就是在一开始创建数组,数组中的元素个数以及数组所占用的内存空间就已经被固定了。

如果数组中的空间没有使用完,那么就会造成空间浪费。

所以在创建数组中之前,就要想清楚这个数组准备用来做什么,里面要放多少数据。

数组长度

当我们需要定义一个遍历数组的函数,但是不知道传入的数组的长度是多少。这时候,怎么知道数组的长度呢?

void getLength(int arr[]){
  int length = sizeof(arr)/sizeof(arr[0]);
  for(int i=0;i<length;i++){
    printf("%d\n", arr[i])
  }
}

这里就需要使用到 sizeof 运算符.

sizeof(arr) 返回的是数组变量 arr 所占用的内存空间大小,为数据类型所占用的空间大小乘以数组长度;

sizeof(arr[0]) 返回的是数组中第一数值所占用的内存空间大小,和其类型相关。

两者相除后的结果,就是数组 arr 的长度。

多维数组

如果把所有数据都存放在一个数组里面,有时候会显得比较混乱,分不清谁是谁。

例如,我们要存放一个班级所有同学的成绩,但是成绩又分学科,有语文、数学、英语等等。

如果用一维数组表示:

double arr[9] = {97.5, 90.5, 80.0, 100.0, 
              60.5, 50.5, 30.5, 86.0, 93.5}

像这种情况,处理起数据就会比较麻烦。

最好展示的方式,就是使用表格。每一行表示每一位同学,每一列对应的就是学科成绩,这样就会让数据显得清晰明了。

方式如下:

double arr[3][3] = {
  {97.5, 90.5, 80.0},
  {100.0, 60.5, 50.5},
  {30.5, 86.0, 93.5}
}

这种方式也被称之为二维数组。

数组里面可以存放任意类型的数据,而数组本身也是一个数据类型,自然也是可以放在数组里面。

所以,二维数组也被称为数组的数组。

二维数组的赋值和访问方式,和一维数组的访问方式一样,都是可以通过索引值来赋值或者访问。

arr[0][1] = 99.0
arr[1][2]; // 50.5

第一行表示将 arr 数组中的第一个数组中的第二个数据​更改为 99.0。

第二行表示访问 arr 数组中的第二个数组中的第三个数据,所以值为 50.5​。

有二维数组,自然也会有三维的、四维的等等,统称为多维数组。

对于一般人来说,学习到二维数组就差不多。​再高维的数组,目前来说没有太大的必要。

值得注意的是,无论是一维数组,还是多维数组,里面所有元素的数据类型都必须一致。

总结

文中介绍了数组的定义和作用,数组的声明方式,初始化赋值,索引值赋值。以及如何确定未知长度数组的长度,二维数组的声明和使用。

如果您觉得本篇文章还可以的话,点个赞或者分享,支持一下。目前个人还处在学习阶段,文中可能会出现谬误之处,如有发现的,希望能够不吝赐教一番。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/47424.html

(0)
上一篇 2024-04-21 17:00
下一篇 2024-04-23 16:33

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信