用数组指针创建三围数组

finalangelx 2015-04-28 05:46:22
前些日子有个单子制作个二维数组的Map[X][Y];
于是乎自己开始倒腾下代码。结果发现,真的3年不写代码,这些都还给老师了。

后来百度到一篇文章是“三维数组指针”的。还出自CSDN,百度置顶了。
http://bbs.csdn.net/topics/250056494
就稀里糊涂的把代码复制到工程里试了试,崩溃的一塌糊涂。。。

好吧,我复制的是5楼的代码。

后来自己研究了下,发现蹊跷的地方了。

首先拿一维指针来说,就是普通的 指针。

我们也拿int来做例子。
int *p;
p = new int;√
p = new int[100];√
以上两种方案都是对的,一个是指向 int的内存地址,一个是指向 int 数组的地址 ,两个都是对的。

接下里二维数组

int **p;
p = new int[5];//或者学习之前文章里的 p = (int**)new int[5];也行
for(int i = 0; i < 5; i++)
{
p[i] = new int[10];
}

这个代码看起来有没问题?
认真分析下。p[i] = new int[10]; 那么这个p[i] 是什么东西?思考下就会知道 p[i] 是个 int *;不然,他怎么能指向一个数组。
反过来推论,p = new int[5];是错误的,因为 如果 new int[5],那么 p[i] = int;是一个存储空间。而 int = int[10] 这本身就是个错误。

所以正确的应该是
int **p;
p = new int*[5];//ps:注意 new (int*)[10]和new int*[5] 是有区别的。

for(int i = 0; i < 5; i++)
{
p[i] = new int[10];
}

如果 之前的 p = new int[5]这个该怎么理解?但是有的时候可以运行成功是为什么?
这就是说你创建了 int数组,而int刚刚好,与指针类型所占的内存空间一样。刚好形成了转换。
如果你不是创建int数组,你创建的是 Struct[5],你看看会是个什么结果。。。
p[0]----[int][int][int][int][int][int][int][int][int][int][int]
p[1]----[int][int][int][int][int][int][int][int][int][int][int]
p[2]----[int][int][int][int][int][int][int][int][int][int][int]
p[3]----[int][int][int][int][int][int][int][int][int][int][int]
p[4]----[int][int][int][int][int][int][int][int][int][int][int]
上面这个就是大致的二维数组的 闹补图了。。。大致就是如此吧。
三维数组还没说?
好吧,我觉得可以抄袭之前那个文章里的代码了,主要就是 new的对象记得修改成对应 数组指针就好了。
...全文
571 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
目录如下: ==================================== 实例1 HelloWorld 实例10 创建一个窗体 实例100 上传文件 实例11 按扭 实例12 复选框 实例13 复合下拉列表 实例14 下拉列表 实例15 选项卡 实例16 对话框 实例17 文件对话框 实例18 使用HTML语言 实例19 菜单 实例2 java流程控制 实例20 工具栏 实例21 内部窗体 实例22 分割一个面板 实例23 滑动杆 实例24 颜色过滤器 实例25 表格 实例26 基本图形绘制 实例27 绘制波图形 实例28 图片的处理 实例29 绘制指针时钟 实例3 数组数据操作 实例30 三围立方框 实例31 三围立方体 实例32 标准输入输出 实例33 读写文件(字节) 实例34 读写文件(字符操作) 实例35 获取文件信息 实例36 目录操作 实例37 读取随机文件 实例38 操作EXECL文件 实例39 生成PDF文件 实例4 矢量对象操作 实例40 压缩和解压文件 实例41 执行系统命令 实例42 获取计算机名称和IP地址 实例43 一对简单的服务器和客户端 实例44 多线程服务器 实例45 使用SMTP协议发送邮件 实例46 使用SMTP协议接收邮件 实例47 使用JAVAMAIL发送邮件 实例48 使用JAVAMAIL接收邮件 实例49 获取URL文本 实例5 哈希表和枚举器 实例50 一个简单的WEB服务器 实例51 数据报通讯:聊天吧 实例52 使用ODBC连接数据库 实例53 加载JDBC驱动 实例54 使用语句预处理 实例55 可滚动结果集 实例56 数据库元数据 实例57 结果集元数据 实例58 调用存储过程 实例59 事务处理 实例6 类的继承 实例60 继承THREAD 实例62 多线程 实例63 线程组群 实例64 线程间通讯 实例65 线程同步 实例66 线程控制 实例67 线程优先级 实例68 使用DOM解析XML 实例69 使用SAX解析XML 实例7 接口和抽象类 实例70 使用JDOM解析XML 实例71 使用JDOM操作XML 实例72 欢迎进入APPLET世界 实例73 传递参数 实例74 监测鼠标事件 实例75 监测键盘事件 实例76 在APPLET中使用SWING 实例77 应用JAR包 实例78 播放声音 实例79 一个简单的SERVLET 实例8 类的标识和访问控制 实例80 使用SERVLET获取客户表单 实例81 SERVLET读取COOKIE数据 实例82 SERVLET读取SESSION数据 实例83 一个简单的JSP 实例84 JSP处理表单提交 实例85 JSP连接数据库 实例86 JSP使用数据连接池 实例87 JSP+BEAN的应用 实例88 JSP+BEAN连接数据库 实例89 读取属性文件 实例9 异常的捕获和实现自己的异常类 实例90 上传文件 实例91 读取浏览器文件头 实例92 无状态会话EJB 实例93 有状态会话EJB 实例94 容器管理实体EJB 实例95 BEAN自管理实体EJB 实例96 消息驱动BEAN 实例97 简单的STRUTS 实例98 信息表单提交 实例99 连接数据库

33,014

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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