近期数据结构课讲到多维数组及矩阵,说到数据存储在计算机中实际存储顺序的时候就晕了,概念自己倒是知道,但是自己算的时候就迷迷糊糊。身边也有同学和我抱怨说老师上课进度太快了,认为虽然c里面提过但上课还是需要再解释。想了想就写了这篇文章,也算是帮同学也帮自己大概理一下思路。
本文将就多维数组的概念、C语言中多维数组的定义方法及内存分析等点进行解析。
在讲多维数组前,我会先说最基本的一维数组,然后再讲二维数组,再由二维数组引申至多维数组。所以建议已经了解数组的同学可以直接看二维数组,已经熟悉数组想搞清多维数组元素地址求解的同学直接往下拉到最后一部分。
一维数组
数组是含有多个具有相同数据类型的数据的有序(此处的“有序”指所有元素依次存放在内存中相邻的一组线性空间内,除了第一个和最后一个元素外,每个元素有且只有一个前驱和后继)集合,数组中的数据称为数组元素。这些数据在内存中占用连续的存储空间。数组一旦定义,在程序执行期间其位置和大小不能再发生变化。
这里涉及到的知识点有关计算机内存的存储结构了,接触过汇编或者是组成原理的同学肯定懂,不懂的同学建议去了解一下。简单形象地理解记忆,如图,我们的数据存储在相应存储器的存储单元中,计算机中存储单元都是按顺序排号的,每个存储单元有一个地址,通过对这个地址的查找你可以访问到对应的存储单元。
假设我们定义一个一维数组
int a[3] = {1, 2, 3};
则它在内存中相应的存储形式如图。
一维数组元素地址求解
数组寻址可由首地址+偏移量得到。也就是说,要想知道当前元素地址,则必须知道它所在数组的首址以及相对数组第一个元素的偏移量,而偏移量可以由 元素个数∗单个元