将二维数组传递给 C 函数的方法

2023-12-21

我一周前开始学习C语言。 为了测试,我决定编写一个井字游戏。

我有一块田地。

int field[3][3];

和一个函数 printField

void printField(int field[3][3]){
for(int i = 0; i < 3; i++){
    for(int j = 0; j < 3; j++){
        printf("%i", field[i][j]);
    }
    printf("\n");
}}

它在 main 中的工作方式如下:

int main(){
printField(field);}

但如果我改变

 void printField(int field){...}

or

void printField(int field[][]){...}

它给了我一堆错误:

subscripted value is neither array nor pointer nor vector                      
passing argument 1 of ‘printField’ makes integer from pointer without a cast
note: expected ‘int’ but argument is of type ‘int (*)[3]’

为什么我不能像这样传递数组? 还有其他方法可以通过吗?


该函数独立于对该函数的任何调用。因此该函数无法从程序的其余部分猜测数组大小是多少。在函数体中,您必须有常量或变量来表示所有维度。

您可以使用变量来代替固定大小:

void printField(int r, int c, int field[r][c])
{
    for(int i = 0; i < r; i++)
        for(int j = 0; j < c; j++)
            printf("%i", field[i][j]);

    printf("\n");
}

并调用该函数:

printField(3, 3, field);

您可以根据数组的名称计算维度。使用宏限制了丑陋的语法:

#define printField(a) printField( sizeof(a)/sizeof((a)[0]), sizeof((a)[0]) / sizeof((a)[0][0]), (a) )

int f1[3][3] = { 0 };
printField(f1);

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

将二维数组传递给 C 函数的方法 的相关文章

  • 在 Java 中创建 T 的新实例

    在C 中 我们可以定义一个泛型class A
  • 检测wlan是否关闭

    任何人都可以给我一个提示 如何在 Windows Phone 上以编程方式检测 C 8 1 应用程序 不是 8 0 是否启用 禁用 WLAN 我不想更改这些设置 只是需要知道 该解决方案是一个 Windows 8 1 通用应用程序 Wind
  • CSharpRepl emacs 集成?

    我碰巧知道莫诺CSharpRepl http www mono project com CsharpRepl 是否有 emacs csharp 模式使用它在一个窗口中运行 REPL 并像 python 模式一样在另一个窗口中编译 运行 C
  • awk 每个文件后换行

    使用此脚本 每个字段都会根据当前文件的最长单词打印出来 但需要每个文件都有一个换行符 如何才能实现这一目标 awk BEGIN ORS n FNR NR a i 0 if length 0 gt length max max 0 l len
  • 从模板切换传递的类型

    在 C 中是否可以检查传递给模板函数的类型 例如 template
  • 检测到堆栈崩溃

    我正在执行我的 a out 文件 执行后 程序运行一段时间 然后退出并显示消息 stack smashing detected a out terminated Backtrace lib tls i686 cmov libc so 6 f
  • 计算另一个表达式中的 C# 表达式

    我想在另一个表达式中使用一个表达式 Expression
  • 获取 boost Spirit 语法中的当前行

    我正在尝试使用 boostspirit 获取正在解析的文件的当前行 我创建了一个语法类和结构来解析我的命令 我还想跟踪在哪一行找到命令并将其解析到我的结构中 我将 istream 文件迭代器包装在 multi pass 迭代器中 然后将其包
  • 使用查询表达式对 List 进行排序

    我在使用 Linq 订购这样的结构时遇到问题 public class Person public int ID get set public List
  • 增强精神、递归和堆栈溢出

    为什么下面的代码在运行时崩溃 它会给出堆栈溢出错误 include
  • 使用 C# 和 wpf 创建类似 Dock 的应用程序

    我需要创建一个与我们购买笔记本电脑时获得的应用程序类似的应用程序 仅当鼠标指针到达窗口顶部时它才可见 那么我怎样才能使用 C 4 0 来做到这一点呢 http www notebookcheck net uploads pics win2
  • 从BackgroundWorker线程更新图像UI属性

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

    我想回调 Rx 订阅中的异步函数 例如 像那样 public class Consumer private readonly Service service new Service public ReplaySubject
  • 英文日期差异

    接近重复 如何计算相对时间 https stackoverflow com questions 11 how do i calculate relative time 如何在 C 中计算某人的年龄 https stackoverflow c
  • jQuery 相当于 underscore.js 的 groupBy

    jQuery 中是否有一个内置函数可以执行相当于http underscorejs org groupBy http underscorejs org groupBy 有什么解决方法吗 Thanks 不 jQuery 不是为数据处理而设计的
  • 如何停止无限循环?

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

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • DataContractSerializer 事件/委托字段问题

    在我的 WPF 应用程序中 我正在使用DataContractSerializer序列化对象 我发现它无法序列化具有事件或委托声明的类型 考虑以下失败的代码 Serializable public abstract class BaseCl
  • 使用 numpy 加速 for 循环

    下一个 for 循环如何使用 numpy 获得加速 我想这里可以使用一些奇特的索引技巧 但我不知道是哪一个 这里可以使用 einsum 吗 a 0 for i in range len b a numpy mean C d e f b i

随机推荐

  • 使用 json4s 在 Scala 应用程序中生成 json

    我正在尝试使用 json4s 在 Scala 应用程序中生成 JSON 相当简单 下面是我在 Scalatra 应用程序中整理的一些示例值 import org json4s import org json4s JsonDSL object
  • “不支持的主次版本 52.0”是什么意思,如何解决? [复制]

    这个问题在这里已经有答案了 好的 所以我粗略地理解 52 0 是 Java 8 异常意味着某些代码是用一个版本的 java 编译的 而另一些代码是用另一个版本编译的 我无法理解的是它是哪条路 这是我得到的堆栈跟踪 Exception in
  • 如何在 Linux 中签署 Mac OS X 应用程序?

    对于 OS X 我在 DMG 内分发 Java 应用程序 自 Mountain Lion 发布以来 打开应用程序会出现以下错误消息 应用程序名称 已损坏且无法打开 您应该弹出 磁盘映像 显然解决方法是签署 app 文件 https blog
  • 使用来自外部文件的数据进行 xUnit 测试

    这些天我试图了解 xUnit 测试的工作原理 特别是 我发现有 3 种方法将数据作为参数传递以测试类方法 InlineData ClassData 和 MemberData 但这是我的问题 是否有机会从外部文件获取这些数据 例如 Json
  • 在我的代码执行中添加延迟的正确方法

    我正在尝试制作一个非常简单的逻辑游戏 这个想法是看到一个带有一定数量的彩色方块 按钮 的矩阵 然后隐藏它们 玩家必须单击彩色方块 所以我需要在绘制方块 按钮和返回原始颜色之间有 2 秒的延迟 所有代码都在一个中实现button click
  • java SDK 中 AmazonDynamoDBClient 和 DynamoDB 类之间的区别?

    我正在使用 Amazon 的 DynamoDB java SDK 想了解两者之间的区别AmazonDynamoDB客户端 https github com aws aws sdk java blob master aws java sdk
  • 填充会增加 div 宽度/高度吗? [复制]

    这个问题在这里已经有答案了 b b
  • 在 RIDE 中导入 Java 库

    我正在尝试在 RIDE 中使用 java 库 我发现了一个很好的教程 https blog codecentric de en 2012 06 robot framework tutorial writing keyword librari
  • 由于 AM 容器,应用程序失败 2 次:以 exitCode: 1 退出

    我在 hadoop 2 7 0 上运行了一个 MapReduce 作业 但 MapReduce 作业无法启动 并且遇到以下错误 Job job 1491779488590 0002 failed with state FAILED due
  • U 矩阵和自组织映射

    我正在尝试理解 SOM 当人们发布代表的图像时 我感到很困惑 数据图像让我使用 SOM 将数据映射到地图空间 据说用的是U矩阵 但我们的神经元网格是有限的 那么如何获得 连续 图像呢 例如 从 40x40 网格开始 有 1600 个神经元
  • OSS Nexus:如何使用 REST API 以文本形式检索最新版本

    我想检索最新版本名称 作为文本 以便能够重命名从 Nexus 检索到的具有时间戳的工件 我所做的是创建一个包含内部 jar 项目 依赖项 相关脚本等多个存档的存档 但是 如果打包的 jar 是快照 则存档在下载时会带有时间戳 这些时间戳替换
  • Bootstrap面板折叠当您单击其中的链接时折叠

    在下面的 HTML 页面中 Heading 1 and Heading 2当页面第一次加载时正确折叠 因为我正在使用class panel collapse collapse Then Collapse Expand当用户单击时工作正常He
  • 在 XAML 中将密码框中的文本居中

    我试图将文本放在密码框中居中 在 Blend 中 用于对齐的文本属性全部被禁用 还有其他方法可以做到这一点吗 感谢您的帮助 Horizo ntalContentAlignment 在 WPF 中工作 但不幸的是在 Silverlight 中
  • 我怎样才能指导更少的人忽略某些风格的数学?

    我正在使用新的calcCSS 中的函数获取对象的宽度 如下所示 width calc 100 40px 不幸的是 由于这是在 LESS 文件中 因此 LESS 在编译时 有效 地将其预先转换为 60 我希望更少地忽视数学calc函数 因为我
  • 如何在 React 应用程序中排除全局样式?

    我在用材质用户界面 https material ui com 用于构建我的 React 项目 然而 有一个组件必须嵌入到不同的站点 意思是 我提供该组件的生产版本以将其嵌入到不同的站点 My React 应用程序的 css正在被覆盖全局样
  • 如何在一个 EC2 实例上运行多个应用程序

    我有几个小型生产站点和一堆有趣的爱好者 实验应用程序等 我想在一个 EC2 实例上运行所有这些 我可以安装一次node js npm express 和 couchdb 然后在不同的端口上运行每个应用程序 并调整我的域注册表中的 dns 设
  • Numpy loadtxt 对数字进行四舍五入

    我正在使用 numpy loadtxt 函数读取大量数据 数据似乎已四舍五入 例如 文本文件中的数字是 3 79000000000005E 01 但 numpy 读取的数字是 37 9 我已在 loadtxt 调用中将 dypte 设置为
  • 相对 z 指数?

    我有一个弹出的 对话框 小部件 其 z 索引为 100 当我创建另一个弹出窗口 浮动 div 时 它出现在对话框小部件下方 因为我没有显式设置 z 索引新的弹出窗口 结构最终看起来像 div div div div div div div
  • Django 重定向功能保留旧的 url 路径

    问题是当我尝试使用时django shortcuts redirect在我的视图函数中 Django 不只是简单地打开新的 url 路径return redirect url 但将所需的 url 路径添加到当前 url 例子当前网址是 主页
  • 将二维数组传递给 C 函数的方法

    我一周前开始学习C语言 为了测试 我决定编写一个井字游戏 我有一块田地 int field 3 3 和一个函数 printField void printField int field 3 3 for int i 0 i lt 3 i fo