c语言结构数组(c语言基础知识数组)
在生活中,很多人可能想了解和弄清楚从零开始学习C语言丨最基本的数据结构——数组的相关问题?那么关于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(&34;, 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.0arr[1][2]; // 50.5
第一行表示将 arr 数组中的第一个数组中的第二个数据更改为 99.0。
第二行表示访问 arr 数组中的第二个数组中的第三个数据,所以值为 50.5。
有二维数组,自然也会有三维的、四维的等等,统称为多维数组。
对于一般人来说,学习到二维数组就差不多。再高维的数组,目前来说没有太大的必要。
值得注意的是,无论是一维数组,还是多维数组,里面所有元素的数据类型都必须一致。
总结
文中介绍了数组的定义和作用,数组的声明方式,初始化赋值,索引值赋值。以及如何确定未知长度数组的长度,二维数组的声明和使用。
如果您觉得本篇文章还可以的话,点个赞或者分享,支持一下。目前个人还处在学习阶段,文中可能会出现谬误之处,如有发现的,希望能够不吝赐教一番。
温馨提示:通过以上关于从零开始学习C语言丨最基本的数据结构——数组内容介绍后,相信大家有新的了解,更希望可以对你有所帮助。