3D 数组如何在 C 中存储?

2024-05-04

据我所知,C 中的数组是按行优先顺序分配的。因此,对于 2 x 3 数组:

0  1
2  3
4  5

存储在内存中为

0 1 2 3 4 5

但是,如果我有一个 2 x 3 x 2 数组怎么办:

0  1
2  3
4  5

and

6  7
8  9
10 11

这些是如何存储在内存中的?只是连续的,例如:

0 1 2 3 4 5 6 7 8 9 10 11

或者是其他方式?或者它取决于什么?


在低层次上,不存在多维数组这样的东西。只有一块平坦的内存块,足够大以容纳给定数量的元素。在 C 语言中,多维数组在概念上是其元素也是数组的数组。所以如果你这样做:

int array[2][3];

从概念上讲,你最终会得到:

array[0] => [0, 1, 2]
array[1] => [0, 1, 2]

这导致元素在内存中连续排列,因为array[0] and array[1]实际上并不保存任何数据,它们只是对两个内部数组的引用。请注意,这意味着只有[0, 1, 2]条目实际上占用内存空间。如果将此模式扩展到下一个维度,您可以看到:

int array[2][3][2];

...将为您提供如下结构:

array[0] => [0] => [0, 1]
            [1] => [0, 1]
            [2] => [0, 1]
array[1] => [0] => [0, 1]
            [1] => [0, 1]
            [2] => [0, 1]

它继续在内存中连续排列元素(如上所述,只有[0, 1]条目实际上占用内存中的空间,其他所有内容只是对这些条目之一的引用的一部分)。正如您所看到的,无论您有多少个维度,这种模式都会持续下去。

只是为了好玩:

int array[2][3][2][5];

给你:

array[0] => [0] => [0] => [0, 1, 2, 3, 4]
                   [1] => [0, 1, 2, 3, 4]
            [1] => [0] => [0, 1, 2, 3, 4]
                   [1] => [0, 1, 2, 3, 4]
            [2] => [0] => [0, 1, 2, 3, 4]
                   [1] => [0, 1, 2, 3, 4]
array[1] => [0] => [0] => [0, 1, 2, 3, 4]
                   [1] => [0, 1, 2, 3, 4]
            [1] => [0] => [0, 1, 2, 3, 4]
                   [1] => [0, 1, 2, 3, 4]
            [2] => [0] => [0, 1, 2, 3, 4]
                   [1] => [0, 1, 2, 3, 4]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3D 数组如何在 C 中存储? 的相关文章

  • Poco c++Net:Http 从响应中获取标头

    我使用 POCO C Net 库进行 http 我想尝试制定持久缓存策略 首先 我认为我需要从缓存标头中获取过期时间 并与缓存值进行交叉检查 如果我错了 请告诉我 那么我如何从中提取缓存头httpResponse 我已经看到你可以用 Jav
  • awk 每个文件后换行

    使用此脚本 每个字段都会根据当前文件的最长单词打印出来 但需要每个文件都有一个换行符 如何才能实现这一目标 awk BEGIN ORS n FNR NR a i 0 if length 0 gt length max max 0 l len
  • 在 C# 中调用 C++ 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有很多用 C 编写的库 我想从 C 调用这些库 但是 我遇到了很多问题 我想知道是否有书籍或指南告诉我如何做到这一点 Dll导入 htt
  • 如何使用 SOAP 且不使用 WSE 在 .NET 中签署 Amazon Web 服务请求

    亚马逊产品广告 API 以前称为 Amazon Associates Web Service 或 Amazon AWS 实施了一项新规则 即自 2009 年 8 月 15 日起 向其发送的所有 Web 服务请求都必须经过签名 他们在其网站上
  • 从模板切换传递的类型

    在 C 中是否可以检查传递给模板函数的类型 例如 template
  • 为什么'enable_if'不能用于禁用这里声明

    include
  • 一元 +/- 运算符如何可能导致“-a”或“+a”中的整数提升,“a”是算术数据类型常量/变量?

    这句看似微不足道的台词摘自我的迈克 巴纳汉和布雷迪的 C 书 第 2 8 8 2 节 http publications gbdirect co uk c book chapter2 expressions and arithmetic h
  • 增强精神、递归和堆栈溢出

    为什么下面的代码在运行时崩溃 它会给出堆栈溢出错误 include
  • 根据对象变量搜索对象列表

    我有一个对象列表 这些对象具有三个变量 ID 名称和值 这个列表中可能有很多对象 我需要根据ID或Name找到一个对象 并更改值 例子 class objec public string Name public int UID public
  • 在 asp.net MVC 中使用活动目录进行身份验证

    我想使用活动目录对我的 asp net mvc 项目中的用户进行身份验证 在网上冲浪了几个小时后 我没有找到任何对我有用的东西 我已经看到了所有结果 但什么也没有 我尝试按照许多帖子的建议编辑我的 web config 如果有人可以帮助我提
  • 为什么 Cdecl 调用在“标准”P/Invoke 约定中经常不匹配?

    我正在开发一个相当大的代码库 其中 C 功能是从 C P Invoked 的 我们的代码库中有很多调用 例如 C extern C int stdcall InvokedFunction int 使用相应的 C DllImport CPlu
  • 如何连接以逗号分隔的命名范围的返回值

    我花了几个小时试图找出如何连接命名范围中的返回值 但结果是 运行时错误 32 类型不匹配 作为一个新手 我仍在与数组作斗争 所以也许我忽略了一些细节 谢谢你帮助我 示例 B1 苯 B2 柴油 B3 混合动力 gt E1 汽油 E2 柴油 E
  • 从BackgroundWorker线程更新图像UI属性

    在我正在编写的 WPF 应用程序中 我有一个 TransformedBitmap 属性 该属性绑定到 UI 上的 Image 对象 每当我更改此属性时 图像就会更新 因此显示在屏幕上的图像也会更新 为了防止在检索下一张图像时 UI 冻结或变
  • 如何从 Rx Subscribe 回调异步函数?

    我想回调 Rx 订阅中的异步函数 例如 像那样 public class Consumer private readonly Service service new Service public ReplaySubject
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • 需要提取字符串中点后的最后一个数字,如“7.8.9.1.5.1.100”

    我需要提取 C 字符串中最后一个点后面的最后一个数字 例如 7 8 9 1 5 1 100 并将其存储在整数中 Added 该字符串也可以是 7 8 9 1 5 1 1 或 7 8 9 1 5 1 0 我还想验证它在最后一个点之前恰好是 7
  • 结构化绑定的用例有哪些?

    C 17 标准引入了新的结构化绑定 http en cppreference com w cpp language structured binding功能 最初是proposed http www open std org jtc1 sc
  • 使用未分配的局部变量

    我遇到了一个错误 尽管声明了变量 failturetext 和 userName 错误仍然出现 谁能帮帮我吗 Use of Unassigned local variable FailureText Use of Unassigned lo

随机推荐

  • 集成ZXing二维码扫描器,无需安装BarCode Scanner

    我正在尝试将 ZXing QR 码集成到我的 Android 应用程序中 而不安装条形码扫描仪应用程序 我已按照以下步骤操作 1 首先我下载了 ZXing zip文件并解压它 2 将ZXing项目作为android现有项目打开 然后转到an
  • 如何在 Angular i18n 路由器模块中使用 LOCALE_ID

    我正在使用 Angular 的 i18n 设置构建一个小型 Angular 应用程序 除了 url 路径和 slugs 的翻译之外 一切都工作正常 我尝试了一种可能的解决方案 为每种语言提供一个路由模块 如此处所述 但这不起作用 我以为我可
  • OkHttp + 毕加索 + 改造

    问题是如何将所有这些结合起来3一个项目中的库 制作一个 OkHttpClient 作为 Picasso 和 Retrofit 的背景层 如何像 Volley 库中那样进行优先级更改 用于分页 简而言之 OkHttpClient okHttp
  • React Hangman 游戏:点击状态未正确管理,产生意外行为

    你好 我有 Letters js 它可以生成 a z 的可用字母 import React useState from react import AvailableLetter from AvailableLetter AvailableL
  • 如何跳过压缩一张 PNG?

    注意 我已经解决了这个问题 但花了很长时间才在这里发布问题 答案 Xcode 构建过程在构建时 优化 我的 PNG 这通常不是问题 但以这种方式处理的 iTunesArtwork 会导致其损坏 以致 iTunes 无法显示它 我怎样才能防止
  • 双击时将文件名传递给 Windows 批处理 (.bat) 脚本,以便它将以八度运行

    我是使用批处理脚本的新手 并且对八度音程有一定的经验 我有很多使用八度函数检查的数据文件 我正在尝试进行设置 以便我可以双击具有自定义扩展名的文件来直接打开八度函数 想想 当我双击这个文本文件时 它会在记事本中打开 为此 我写了一个非常基本
  • 创建前判断MySQL表索引是否存在

    我们系统的自动数据库迁移过程涉及运行包含新表定义及其附带索引的 sql 脚本 仅当这些表和索引尚不存在时 我才需要能够创建它们 表是通过使用 IF NOT EXISTS 来处理的 但创建索引时不存在这样的语法 我尝试编写一个存储过程 如下所
  • 在命名空间内的类中使用带有运算符重载的字符串流时,“与‘operator>>’不匹配”

    我试图在命名空间内的类中重载 gt gt 运算符 但是一旦我尝试将它与字符串流一起使用 它就不起作用 这是我的代码的精炼版本 include
  • 有没有办法合并 Kusto 中两个表的数据?

    详细了解如何在 Kusto 中编写查询 我在两个具有不同角色的表中有一列 但列标题是角色 我想将数据合并到一个名为 角色 的列中 我尝试添加这个 extends Roles strcat RoleName Role 但这只是组合了数据 这是
  • 如何告诉 pytest-xdist 按顺序从一个文件夹运行测试,并并行运行其余文件夹?

    想象一下我有test unit 可以安全地并行运行并且test functional 目前还不能并行运行 有没有一种简单的方法可以说服 pytest 运行functional依次 考虑到我们正在讨论大量的测试 因此改变每个测试函数 方法将会
  • Cassandra:如何将整个表移动到另一个键空间

    我的 Cassandra 的版本信息 cqlsh 5 0 1 卡桑德拉 2 2 5 CQL 规范 3 3 1 本机协议 v4 我正在尝试将一些巨大的表 几百万行 移动到另一个键空间 除了 COPY to csv and COPY from
  • 如何在 Android 上将 SurfaceView 与 main.xml 一起使用?

    在我的项目的主课中 我有 public class MyClass extends Activity public void onCreate Bundle savedInstanceState super onCreate savedIn
  • 如何在javascript中实现deque数据结构?

    我正在用 javascript 学习数据结构 我现在的重点是如何实现双端队列 编辑 从下面的评论中我得到了有关如何实施的有用指示deque based array 有没有一个具体实施的方向deque based object使用类 我明白了
  • Symfony 不会从集合中删除实体

    我知道一般来说有很多关于这个主题的帖子 不幸的是 这些大多涉及对数据库的实际持久操作 就我而言 我在持久操作之前发生了一个问题 我有一个带有实体 学说 持久性集合的表单 您可以通过 javascript 从 DOM 中删除 对象 提交后 当
  • Vim 关闭窗口而不关闭缓冲区

    如何在不删除缓冲区的情况下关闭窗口或取消分割 A window is a viewport on a buffer In vim to manage windows it is CTRL w the leading command that
  • Python:导入错误,没有名为 urllib 的模块

    我刚刚从Linode租了一个VPS 它有python2 5和ubuntu 8 04 当我运行这个命令时python shell import urllib I get ImportError No module named urllib 可
  • 杀死应用程序后,后台获取不起作用

    我正在尝试通过后台获取从 url 获取数据 我的函数尝试获取数据 如果有新数据 它会发送本地通知 当我最小化应用程序时 后台获取会在大约 10 20 分钟后开始工作 但是当我杀死该应用程序 双击主页按钮并关闭应用程序 时 它不起作用 我等了
  • 为什么正则表达式不能使用关键字而不是字符?

    好吧 我几乎不了解 RegEx 基础知识 但为什么他们不能将其设计为使用关键字 如 SQL 而不是一些神秘的通配符和符号呢 由于正则表达式是在运行时解释 解析的 所以是为了性能吗 未编译 或者也许是为了写作速度 考虑到当您学习一些 简单 字
  • 异步 lambda 到表达式>

    众所周知 我可以将普通的 lambda 表达式转换为Expression
  • 3D 数组如何在 C 中存储?

    据我所知 C 中的数组是按行优先顺序分配的 因此 对于 2 x 3 数组 0 1 2 3 4 5 存储在内存中为 0 1 2 3 4 5 但是 如果我有一个 2 x 3 x 2 数组怎么办 0 1 2 3 4 5 and 6 7 8 9 1