考试知识点之数组讲解

举报
Linux猿 发表于 2021/11/25 22:52:14 2021/11/25
【摘要】 🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊! 🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬

🎈 作者: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++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

欢迎小伙伴们点赞👍、收藏⭐、留言💬


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。