为什么在将二维数组传递给 C 函数时必须提供维度?

2023-12-01

我不确定是否history标签是相关的,但请随意添加。 我认为这是历史原因,这就是我提出这个建议的原因。

为什么我无法声明如下所示的函数签名?

void foo(int doubly_indexed_array[][]) {
  ...
}

这使

$ gcc mem.c
mem.c:4: error: array type has incomplete element type

为什么必须声明如下所示的维度之一?

void foo(int doubly_indexed_array[][10]) {
  ...
}

您需要声明第二个,而不仅仅是一个。它与内存布局有关,二维数组连续存储在内存中,这意味着所有二维数组都是连续的。

So for int[2][2]内存布局如下(假设初始化为 0):

[[0, 0][0, 0]]

例如,编译器必须知道在第一个维度上索引时要增加多少指针。所以如果一个 int 数组被命名为 a,

a[i][j]是真的(address of a) + i*sizeof(int)*second_dimension + j*sizeof(int)

所有这些都需要在编译时知道,以便编译器可以生成代码。

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

为什么在将二维数组传递给 C 函数时必须提供维度? 的相关文章

  • 以相反的顺序迭代可变参数模板参数

    如果我手动反转传递给它的模板参数的顺序 以下代码将起作用 template
  • 扫描文本文件时如何跳过行?

    我想扫描一个文件并在阅读之前跳过一行文本 我试过 fscanf pointer n struct test i j 但这个语法只是从第一行开始 我可以使用 scanf 使用以下指令跳过行 fscanf config file n n 格式字
  • SetWindowsHookEx 函数返回 NULL

    我正在研究 DLL 注入 但收到错误如下 挂接进程失败 87 参数不正确 目标进程和dll都是64位的 注入代码为 BOOL HookInjection TCHAR target TCHAR dll name https msdn micr
  • 通过单个 GPIO 引脚转储闪存

    我正在使用 Infineon 的 XMC4500 Relax Kit 并尝试通过单个 GPIO 引脚提取固件 我非常天真的想法是通过 GPIO 引脚一次转储一位 然后用逻辑分析仪以某种方式 嗅探 数据 伪代码 while word by w
  • 返回 int& 的函数[重复]

    这个问题在这里已经有答案了 我在网上查了一下发现一篇试图解释的文章std move和右值 http thbecker net articles rvalue references section 01 html并发现了一些我实在无法掌握的东
  • 关闭 XDOCUMENT 的实例

    我收到这个错误 该进程无法访问文件 C test Person xml 因为它是 被另一个进程使用 IOException 未处理 保存文件内容后如何关闭 xml 文件的实例 using System using System Collec
  • C# 中附加/分离事件处理程序的不同方式有什么区别

    我的问题有两个部分 首先 我们可以通过以下两种方式附加事件处理程序 myObject MyEvent new EventHandler MyHandler myObject MyEvent MyHandler 据我了解 这两者是等价的 在第
  • rand() 播种与 time() 问题

    我很难弄清楚如何使用 rand 并使用 Xcode 用 time 为其播种 我想生成 0 到 1 之间的随机十进制数 该代码为我提供了元素 1 和 2 看似随机的数字 但元素 0 始终在 0 077 左右 有什么想法吗 我的代码是 incl
  • 特定设备的不同字体大小

    我目前正在开发通用应用程序 我需要分别处理移动设备和桌面的文本框字体大小 我找到了一些方法 但都不能解决问题 使用 VisualStateManager 和 StateTrigger 为例
  • .net Framework (.net 4.0) 中定义 Base 3 数字的类

    我正在寻找一些可以用来定义 3 基数 三进制数 的类 有什么我可以在 net 框架中使用的东西或者我需要写一些东西吗 谢谢你的帮助 您可以使用解析Convert ToInt32 s base http msdn microsoft com
  • 抽象类或接口。哪种方式是正确的?

    有两种方法可以选择抽象类或接口 微软解决方案和Oracle解决方案 微软 设计指南 请使用抽象 在 Visual Basic 中为 MustInherit 类而不是接口来将协定与实现分离 http msdn microsoft com en
  • 线程安全的 C++ 堆栈

    我是 C 新手 正在编写一个多线程应用程序 不同的编写者将对象推入堆栈 读者将它们从堆栈中拉出 或至少将指针推入对象 C 中是否有任何内置结构可以在不添加锁定代码等的情况下处理此问题 如果没有 那么 Boost 库呢 EDIT 你好 感谢您
  • 数据损坏 C++ 和 Python 之间的管道

    我正在编写一些代码 从 Python 获取二进制数据 将其通过管道传输到 C 对数据进行一些处理 在本例中计算互信息度量 然后将结果通过管道传输回 Python 在测试时 我发现如果我发送的数据是一组尺寸小于 1500 X 1500 的 2
  • 更改其他页面的主窗口内容

    在 WPF 应用程序的主窗口中 我有一个 Badged 元素 来自材料设计 这是我的代码
  • 是什么原因导致 Linq 错误:此方法无法转换为存储表达式?

    我有一堆具有相同 select 语句的 Linq to Entity 方法 所以我想我会很聪明 并将其分离到它自己的方法中以减少冗余 但是当我尝试运行代码时 我得到了以下内容错误 该方法不能转化为 商店表达式 这是我创建的方法 public
  • C++ 标准中短语“构造函数没有名称”的含义

    在尝试理解 C 标准中的 构造函数没有名称 这句话时 我似乎在 clang 中发现了一个错误 有人可以证实这一点吗 VS2015 and gcc rejects this code and I think they it are is co
  • 在 SQL Server 上执行分页的最佳方式是什么?

    我有一个数据库超过200万记录 我需要执行分页以在我的 Web 应用程序上显示 该应用程序每页必须有 10 条记录DataGrid 我已经尝试使用ROW NUMBER 但是这种方式会选择所有 200 万条记录 然后只得到 10 条记录 我也
  • 是否有任何不使用公共虚拟方法的正当理由? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 是否有任何不使用公共虚拟方法的正当理由 我在某处读到我们应该避免使用公共虚拟方法 但我想向专家确认这是否是有效的声明 对于良好且稳定的 API
  • 正在获取“未终止 [] 设置”。 C# 中的错误

    我正在 C 中使用以下正则表达式 Regex find new Regex url
  • 程序退出后,TcpListener Socket 仍处于活动状态

    当我的程序退出时 我试图停止 TCP 侦听器 我不关心套接字或任何活动客户端套接字上当前活动的任何数据 套接字清理代码本质上是 try myServer Server Shutdown SocketShutdown Both catch E

随机推荐

  • 在 Jscript 中获取给定用户的特殊文件夹路径

    如何获取当前用户以外的特定用户的 shell 文件夹 例如 本地设置 或 本地应用程序数据 的路径 虽然有一些方法可以在 Windows Script Host 中获取特殊文件夹路径 WshShell SpecialFolders and
  • odeint 简单一维 ode 示例无法编译

    我试着跑指定示例在 Debian Squeeze g 4 4 上的 boost 1 54 0 中 洛伦兹系统工作正常 但是简单的一维颂歌 include
  • VB.Net默认表单实例

    我已替换 正则表达式 所有对默认表单实例在我的项目中 我现在想确保我不再使用默认实例 似乎默认实例功能无法禁用 不改变类的ctor 任何人都知道如何在 VB Net 中查找默认表单实例的所有用法 或者 使用类名访问非共享成员 仅供参考 我正
  • 使用 python Flask 从数据库中删除行?

    我正在使用 Flask 框架 似乎无法从数据库中删除行 下面的代码给出了 405 错误 所请求的 URL 不允许使用该方法 有任何想法吗 在py中 app route delete
  • 如何在 jquery 中包含 !important

    我正在尝试使用 jQuery 在 css 属性中添加 important tabs css height 650px important 但是 important 没有效果 如何在 jquery 中包含 important 显然可以在 jQ
  • 运算符重载:无法添加两个指针

    我创建了一个 Fraction 类 它具有用于在两个 Fraction 对象之间进行加 减 乘和除的成员函数以及所需的默认构造函数和复制构造函数 对于这个问题 我必须使用指针 不能使用向量 因为只有用户选择才能创建 Fraction 对象
  • GatsbyJS 与 Firebase - WebpackError:ReferenceError:IDBIndex 未定义

    我收到错误盖茨比发展 它与这个非常相似 https github com firebase firebase js sdk issues 2222 但我收到错误盖茨比发展 而不是盖茨比构建 我做了很多研究 但找不到有效的解决方案 起初我有一
  • MySQL 内连接查询语法错误

    我是一个 MySQL 新手 无法弄清楚这里出了什么问题 我有两张桌子 左表称为 锻炼 相关列是date 输入日期 和id 类型 int 右表称为Workout locations 相关领域 workout id type int and l
  • 通过撰写导航传递 Parcelable 参数

    我想传递一个可分割的对象 BluetoothDevice 使用组合导航转换为可组合项 传递原始类型很容易 composable profile userId arguments listOf navArgument userId type
  • 以同样的方式随机化两个数组 Swift

    我知道有一种新的随机播放方法iOS 9但我想知道是否有办法以相同的方式对两个数组进行洗牌 例如 1 2 3 4 and a b c d shuffle 3 4 1 2 and c d a b 使用shuffle 方法来自如何在 Swift
  • 如何使用表达式来调用以通用列表作为参数的方法调用?

    我们正在使用非常优秀的字符串生成器在我们的项目中作为 ToString 实现的高性能 通用支持 它在调试方面工作得很好 直到我需要生成对象图的字符串表示形式以检查它在加载和关闭之间是否发生了变化 以前我曾使用 MemoryStream 将对
  • swift 中函数和泛型函数的区别

    我想知道 swift Function 和 Generic 函数之间的区别 函数和泛型函数的作用相同 谁能告诉我泛型函数的确切用法 func simpleMin
  • 与矩形以外的形状碰撞..?

    我已经习惯了仅使用矩形进行碰撞检测 所以现在有点困惑 我正在处理类似钻石的形状 在过去的几个小时里 一直在试图找出如何检查碰撞 我尝试检查第一个对象的四个点是否在第二个对象的点内 但这只是形成一个盒子 我认为 我觉得自己在这方面遇到困难的原
  • 一维数组中的唯一值,无需迭代

    冒着成为话题的风险 我决定分享一些代码 问答式 如果普遍认为这是偏离主题的 我会很乐意在需要时删除 Background 我们可以从任何一维数组中检索所有唯一值 或者Range对象变成一维数组 而不必迭代其元素 就我而言 普遍的共识是 必须
  • Node.js:如何顺序运行异步代码

    我有这段代码 User find function err users for var i 0 i lt users length i pseudocode Friend find user curUser id function err
  • 调用线程无法访问此对象,因为不同的线程拥有它。WPF [重复]

    这个问题在这里已经有答案了 每当我刷新标签时 都会收到此错误 调用线程无法访问该对象 因为另一个线程拥有它 我尝试调用但失败了 我正在使用 WPF 表单 delegate void lostfocs string st private vo
  • python 计算日期时间差

    我正在编写 timediff 函数来计算 2 个给定日期时间之间的时间 秒 差 def timediff time1 time2 timeformat d b Y H M S time1 01MAR2016 07 11 53 time2 0
  • strtotime('第一个星期一 ..') 当是该月的第一天时返回错误的日期

    echo date Y m d strtotime First Monday date F o strtotime 4 months 上面的代码返回 2012 10 08 这是不正确的 2012 年 10 月的第一个星期一应该返回 2012
  • NSUserDefaults 不保存 TextField 文本 (Swift)

    我正在尝试使用 Swift 创建一个游戏 并且我想添加创建用户名的功能 该用户名将保存在 NSUserDefaults 中 这是我的代码 println Textfield Text usernameTextfield text NSUse
  • 为什么在将二维数组传递给 C 函数时必须提供维度?

    我不确定是否history标签是相关的 但请随意添加 我认为这是历史原因 这就是我提出这个建议的原因 为什么我无法声明如下所示的函数签名 void foo int doubly indexed array 这使 gcc mem c mem