考试知识点之数组讲解
🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
数组可以看成是线性表的一种扩展,关于数组的考点经常以选择题或填空题的形式出现(填空题居多),同时,在算法设计题和编程题中经常会使用到数组,本篇文章就为大家介绍下数组相关的内容。
一、数组的分配
(1)静态分配
数组的静态分配很简单,直接针对对应类型进行分配即可,比如:
int A[10];
int B[10][10];
即:类型 数组名[]……[]; 的形式,一般会用到一维数组和二维数组。
(2)动态分配
动态分配是需要重点关注的一点,动态分配可以节省存储空间,可根据需要进行分配,例如:
int* pointer = (int *)malloc(sizeof(int) * size);
字符串使用的时候注意是否有结束符’\0’,操作字符串的函数,比如:strcpy、strcmp、strlen等都是以‘\0’作为结束符进行判断字符串结尾,所以如果某个字符串没有结束符,在使用这些函数的时候可能会报错哦!
二、数组的顺序表示
这里主要说一下二维数组的表示形式,是一个常考点。
二维数组有两种存储方式:一种是以行为主序进行存储;一种是以列为主序进行存储;当然,用的最多的还是以行为主序进行存储,这里扩展一下,数组存储的方式不一样可能会影响程序的运行时间哦,因为存储方式不一样就会影响数组中值的存取速度,这点不用记,有个概念就好。
限于篇幅,这里以行序为主序进行详细介绍:
假设有如下的二维数组:
以行序为主序存储形式如下:
即:以行为顺序进行存储。
考试常考的是,已知二维数组中某个元素的地址,求另外一个元素的地址,那我们就以这个问题为例进行讲解:
第一种情况:以a00为起点:
首先,假设二维数组为n行m列的数组,每个元素所占用的存储空间大小为L,求二维数组中其它元素aij的存储位置,如下:
其中,L*(m*i+j)为a00与aij相差的存储空间,其中L为一个元素的存储空间大小,(m*i+j)为相差的元素数,因为每行为m个元素,有i行,所以m*i个,最后再加上最后一行的j个,即为aij的存储位置,如下图所示:
图中橘黄色的个数为:m*i,蓝色的个数为j,所以总的相差的空间大小为:L*(m*i+j)。
第二种情况:以aij为起点,求数组中另外一个元素的地址(这里假设为aij后面元素),公式如下:
其中,LOC(i,j)为aij的地址,L为一个元素的存储空间大小,m*(k-i-1)为两个元素相差的整行的元素个数,m-j为相差的i行的元素个数,l为相差的k行的元素个数,如下图所示:
如上图所示:红色部分为:m-j,黄色部分为m*(k-i-1),蓝色为l。
以列为主序的存储顺序与此具有相同的原理,这里就不多讲解了,如果小伙伴们需要讲解,小榜可以在后面的文章中再对列为主序进行讲解。
CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
欢迎小伙伴们点赞👍、收藏⭐、留言💬
- 点赞
- 收藏
- 关注作者
评论(0)