一维数组和二维数组的内存布局有什么区别。

w1012747007 2017-08-04 06:49:32
不是连续的数组吗?
还是二维数组的地址不连续?
...全文
1000 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxf1996 2019-04-03
  • 打赏
  • 举报
回复
首先先说下数组的定义,数组是数据类型相同的数据连续存储的一种数据结构。所以不管是一维还是几维数组,一旦定义好就都是在连续的物理空间存储的。再者,同样大小的数据存储在一维数组中如果需要分多页内存页存储,那么将这些数据存储在多维数组中的情况也同样是占用相同数量的内存页。不管分不分页,这些地址都是连续的。
一维数组和二维数组不同的地方是,一位数组没有行指针,二维数组有行指针。通过行指针可以更快捷直观的读写数据,这就是二维数组比一维数组方便的地方。
w1012747007 2017-08-24
  • 打赏
  • 举报
回复
引用 10 楼 qq_26841367 的回复:
有区别,很大的区别
什么区别,请帮忙解答一下
ALL2DIE 2017-08-23
  • 打赏
  • 举报
回复
有区别,很大的区别
w1012747007 2017-08-21
  • 打赏
  • 举报
回复
引用 8 楼 tianxj001的回复:
不考虑内存分页(STM好像不用)任何成块状的数据,放置的时候,都是连续的,你甚至可以直接理解为其实本质就是一个一维是数组而已,所谓2维甚至更高,这只是数组索引的方法的区别而已,一个4*5的二维数组,在内存就是20个连续地址而已。和一个1*20的一维数组没任何区别,你可以用指针访问去测试一下就可以完全明白。
是的,我用指针访问了,确实是连续的!这个问题是我面试的时候,面试官问我的题目。说char[1024]和char[32][32]内存布局有什么不同?
tianxj001 2017-08-20
  • 打赏
  • 举报
回复
不考虑内存分页(STM好像不用)任何成块状的数据,放置的时候,都是连续的,你甚至可以直接理解为其实本质就是一个一维是数组而已,所谓2维甚至更高,这只是数组索引的方法的区别而已,一个4*5的二维数组,在内存就是20个连续地址而已。和一个1*20的一维数组没任何区别,你可以用指针访问去测试一下就可以完全明白。
w1012747007 2017-08-20
  • 打赏
  • 举报
回复
这篇文章讲的非常到位: 主要还是内存的页交换会影响访问的效率 http://blog.sina.com.cn/s/blog_446b43c10100d6e6.html
worldy 2017-08-08
  • 打赏
  • 举报
回复
简单的说,内存没有差别,你一维数组也可以使用二维来访问
91program 2017-08-07
  • 打赏
  • 举报
回复
数组的内存连续的,无论是几维。接下来就看 LZ 你如何访问:行&列。
大米粥哥哥 2017-08-07
  • 打赏
  • 举报
回复
定义一个二维数组 一个个取地址输出
of123 2017-08-05
  • 打赏
  • 举报
回复
二维数组中,你将“行”看作一个元素,则二维数组就是“行的数组”。 其实,你声明一个指针,去访问一下数组的空间,就明白了。
ckc 2017-08-04
  • 打赏
  • 举报
回复
按哪一维排列会造成差异 就是说[a,b]之后放[a+1,b]还是[a,b+1]肯定是有差异的
操作系统:win10家庭版 JDK版本:jdk-11.0.1 开发环境:IntelliJ IDEA ①界面美观:按钮以流式布局分布在程序右边,通过点击进行基本操作。 ②可两人对下:使用鼠标监听器和15*15的二维数组表示棋盘上棋子的状态。 ③判断输赢:每次根据下棋位置更新二维数组后对齐进行行、列、斜的判断,当存在五子连珠时弹出窗口,根据一系列状态变量判断黑方/白方获胜。 ④认输:根据当前轮到某一方下棋判断另一方获胜。 ⑤合理性判断:对不恰当操作进行提示,例如当鼠标点击位置已有棋子或鼠标点击位置超出棋盘过多时会进行弹窗提示。当游戏胜负已分时再点击“悔棋”,“认输”按钮时也会进行弹窗提示。 ⑥悔棋:使用两个动态数组储存每一次下棋的x、y坐标,悔棋时对两个非空二维数组进行弹出,根据得到的上一步的坐标删除该坐标在棋盘数组上对应的存在状态,并重绘棋盘,更新状态变量等。 ⑦人机对战:经测试,根据网上现有的效果较好的评分表制定了一套“五元组”评分准则,即棋盘是15*15的。那么应该是572个五元组(五个可形成五子连珠的位置)。同时,针对五元组中黑子和白子的数量的不同,给该五元组评不同的分。棋盘上15*15个位置中每一个位置的得分就是包含这个位置的所有五元组的得分加和。从而在人每次下一手棋子时,程序自动遍历整个棋盘,算出所有位置中得分最大的那个位置进行下棋。
最近正在学习Java,也买了很多的有关Java方面的书籍,其中发现《跟我学Java》这本书,都的很不错啊,所以顺便拿电脑把这本书的目录敲了下来,与大家分享。尤其是那些和我一样初学Java的朋友们,看看哪一节对你有用,不妨过来讨论一下哦! 第1章 Java概述 1.1 Java的发展史 1.1.1 Java起源 1.1.2 Java发展 1.2 Java是什么 1.2.1 Java语言 1.2.2 Java平台 1.2.3 Java网络操作系统 1.3 Java的特点 1.4 Java程序类型 1.5 JDK与JRE 1.5.1 Java开发工具包 1.5.2 Java运行环境 1.6 Java技术体系 1.7 Java虚拟机 1.7.1 虚拟机数据类型 1.7.2 Java虚拟机的生命周期 1.7.3 Java虚拟机的体系结构 1.8 垃圾收集器 1.9 本章习题 第2章 Java开发环境 2.1 J2SE的下载和安装 2.1.1 J2SE的下载 2.1.2 J2SE的安装 2.2 环境变量的配置与测试 2.2.1 设置环境变量path 2.2.2 设置环境变量classpath 2.2.3 环境变量的测试 2.3 API文档的下载与使用 2.4 第一个应用程序 2.4.1 HelloWorld程序 2.4.2 程序运行编译命令 2.4.3 HelloWorld编译与运行 2.5 简单开发工具介绍 2.5.1 EditPlus的编译与运行 2.5.2 在UltraEdit上开发Java 2.6 集成开发环境Eclipse介绍 2.6.1 Eclipse下载与安装 2.6.2 Eclipse的透视图 2.6.3 Eclipse的视图(View) 2.6.4 Eclipse的编辑器 2.6.5 Eclipse的工具栏和菜单栏 2.6.6 使用Eclipse编写HelloWorld程序 2.7 本章习题 第3章 Java语言基础 3.1 标识符 3.1.1 标识符的概念 3.1.2 变量命名规则 3.1.3 变量命名技巧 3.2 关键字 3.3 注释 3.4 数据类型 3.4.1 整型 3.4.2 浮点型 3.4.3 字符型 3.4.4 布尔型 3.5 变量与常量 3.5.1 变量声明 3.5.2 变量赋值和初始化 3.5.3 常量 3.6 类型转化 3.6.1 数值类型之间的转换 3.6.2 强制类型转换 3.7 运算符 3.7.1 算术运算符 3.7.2 关系运算符 3.7.3 逻辑运算符 3.7.4 位运算符 3.7.5 自动递增和递减 3.7.6 三元运算符 3.7.7 运算符的优先级 3.8 本章习题 第4章 程序流程控制 4.1 顺序结构 4.2 条件语句 4.2.1 if语句 4.2.2 if-else语句 4.2.3 if-else-if语句 4.2.4 if语句的嵌套 4.2.5 布尔表达式 4.2.6 开关语句 4.3 循环语句 4.3.1 while循环结构 4.3.2 do-while 循环结构 4.3.3 for循环结构 4.3.4 循环的嵌套 4.4 转向语句 4.4.1 break中断语句 4.4.2 continue条件继续语句 4.4.3 标签语句 4.5 返回语句 4.6 综合实例:水仙花数 4.7 本章习题 第5章 字符串 5.1 字符串简介 5.1.1 字符串常量 5.1.2 String创建字符串常量 5.1.3 StringBuffer创建字符串 5.2 连接字符串 5.2.1 与字符串的连接 5.2.2 与其他数据类型的连接 5.3 String字符串操作 5.3.1 基本操作 5.3.2 比较 5.3.3 转化 5.3.4 查找 5.3.5 截取拆分 5.3.6 替换或修改 5.4 StringBuffer类操作 5.4.1 基本操作 5.4.2 字符串操作方法 5.4.3 添加append() 5.4.4 插入insert() 5.5 实例:字符串应用 5.6 本章习题 第6章 数组 6.1 一

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧