以二维数组作为参数调用函数[重复]

2023-12-20

我是 Java 开发人员,而不是 C 程序员。我正在尝试调用一些接收二维数组的函数,尝试如下:

#include <stdio.h>
int foo(int mat[][N])
{ 
  printf("%d",N); /*  <--- here error */

}

int main()
{
    int a[5][5] =
    {
        {1, 2, 3, 4,5},    
        {1, 5, 5, 5,2},    
        {1, 4, 30,4,2},
        {1, 2, 2,2, 2},
        {1,1, 1,1,  2 } 
    };

    foo(a);
    return 0;
}

但编译器说:

'N' 未声明(在此函数中首次使用)

我必须有签名:int foo(int mat[][N])

那么我应该如何传递二维数组呢?


您可以使用宏来定义常数,即#define N 5。在编译时,定义的宏名称的每个出现都将替换为给定值。在我们的例子中每个N将被替换为5。 但这并不能解决你的问题,因为它会打印5每次,即使您更改数组的尺寸。

将数组的维度作为参数传递。

您可以将二维数组作为指针传递。

我创建了一个打印函数,可以向您展示如何访问数组中的元素。所以该函数的原型如下所示:

void print2DMatrix(int *matrix2D, const int rowLength, const int columnLength);

where matrix2D是一个指针,将传递数组的地址。另外两个参数告诉我们数组的维度。

We can 访问元素在选定的行和选定的列中matrix2D[selectedRow * maxRowLength + selectedColumn].

当你调用函数,您可以传递数组的名称,例如print2DMatrix(*myMatrix, myRowLength, myColumnLength);,当然在使用之前要声明并初始化它。print2DMatrix(myMatrix, myRowLength, myColumnLength);会导致警告,因为传递的参数和等待的参数具有不同的类型,但它会正确运行。传递的是双指针,而等待的是单指针。因此你必须使用print2DMatrix(*myMatrix, myRowLength, myColumnLength);, where *我的矩阵将指向数组的第一行。

我想提一下myMatrix and *我的矩阵指向同一个地址,区别在于:myMatrix被视为指向整数的双指针,当*我的矩阵被视为指向整数的指针。跑步printf("%d %d %d", myMatrix, *myMatrix, **myMatrix);看看结果。**我的矩阵将指向第一行的第一个元素,什么是11。请参阅下面的完整代码...

#include <stdio.h>

#define ROW_LENGTH      5
#define COLUMN_LENGTH   5

void print2DMatrix(int *matrix2D, const int rowLength, const int columnLength)
{
    int i;
    for (i = 0; i < rowLength; i++)
    {
        int j;
        for (j = 0; j < columnLength; j++)
        {
            printf("%d ", matrix2D[i * rowLength + j]);
        }
        printf("\n");
    }
}

int main(void)
{
    const int myRowLength = ROW_LENGTH;
    const int myColumnLength = COLUMN_LENGTH;
    int myMatrix[ROW_LENGTH][COLUMN_LENGTH] =
    {
        {11, 12, 13, 14, 15},
        {21, 22, 23, 24, 25},
        {31, 32, 33, 34, 35},
        {41, 42, 43, 44, 45},
        {51, 52, 53, 54, 55}
    };

    print2DMatrix(*myMatrix, myRowLength, myColumnLength);

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

以二维数组作为参数调用函数[重复] 的相关文章

  • 如何从字符串中提取子字符串直到遇到第二个空格?

    我有一个像这样的字符串 o1 1232 5467 1232 5467 1232 5467 1232 5467 1232 5467 1232 5467 如何仅提取 o1 1232 5467 要提取的字符数并不总是相同 因此 我只想提取直到遇到
  • 与 for_each 或 std::transform 一起使用时,如何调用 C++ 函子构造函数

    我以前从未使用过 C 函子 所以我只是想了解它们是如何工作的 例如假设我们有这个函子类 class MultiplyBy private int factor public MultiplyBy int x factor x int ope
  • 是否可以使用 http url 作为 DirectShow .Net 中源过滤器的源位置?

    我正在使用 DirectShow Net 库创建一个过滤器图 该过滤器图通过使用 http 地址和 WM Asf Writer 来流式传输视频 然后 在网页上 我可以使用对象元素在 Windows Media Player 对象中呈现视频源
  • 关于逻辑/算法的想法以及如何防止线程写入 Sql Server 中的竞争

    我有以下逻辑 public void InQueueTable DataTable Table int incomingRows Table Rows Count if incomingRows gt RowsThreshold async
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • C# 中一次性对象克隆会导致内存泄漏吗?

    检查这个代码 class someclass IDisposable private Bitmap imageObject public void ImageCrop int X int Y int W int H imageObject
  • 如何向 Mono.ZeroConf 注册服务?

    我正在尝试测试 ZeroConf 示例http www mono project com Mono Zeroconf http www mono project com Mono Zeroconf 我正在运行 OpenSuse 11 和 M
  • 用于在标头更改时重新编译的简单 C 项目的示例 makefile

    有谁有完整的 makefile 可以执行以下操作 如果 HEADER 文件发生更改 则重建项目 cpp 文件在 makefile 中列出 头文件未在 makefile 中列出 头文件允许与 cpp 文件具有不同的名称 部分cpp文件没有头文
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • 测量进程消耗的 CPU 时钟

    我用 C 语言编写了一个程序 它是作为研究结果创建的程序 我想计算程序消耗的确切 CPU 周期 精确的循环次数 知道我怎样才能找到它吗 The valgrind tool cachegrind valgrind tool cachegrin
  • 如何在 Javascript 中连接 C# ActiveX 事件处理程序

    我尝试使用几个代码片段将 ActiveX 对象与 Javascript 事件处理程序挂钩 我无法确定为什么事件处理程序没有被调用 带有项目的 Github 存储库 https github com JesseKPhillips Csharp
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • 读取依赖步行者输出

    I am having some problems using one of the Dlls in my application and I ran dependency walker on it i am not sure how to
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • C:设置变量范围内所有位的最有效方法

    让我们来int举个例子 int SetBitWithinRange const unsigned from const unsigned to To be implemented SetBitWithinRange应该返回一个int其中所有
  • 如何编写一个接受 int 或 float 的 C 函数?

    我想用 C 语言创建一个扩展 Python 的函数 该函数可以接受 float 或 int 类型的输入 所以基本上 我想要f 5 and f 5 5 成为可接受的输入 我认为我不能使用if PyArg ParseTuple args i v
  • 如何组合两个 lambda [重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中组合两个 lambda 表达式 https stackoverflow com questions 1717444 combining two lamba expressions in c
  • 声明一个负长度的数组

    当创建负长度数组时 C 中会发生什么 例如 int n 35 int testArray n for int i 0 i lt 10 i testArray i i 1 这段代码将编译 并且启用 Wall 时不会出现警告 并且似乎您可以分配

随机推荐

  • 如何将 .jar 文件安装到 Eclipse 中?

    我已经编写了一个 Eclipse 插件项目并成功导出了 jar 文件 但是当我将 jar 文件复制到 Plugins 文件夹中 也尝试了 dropins 文件夹 并重新启动 Eclipse 后 我仍然无法在 Eclipse Installa
  • sqlalchemy:类型错误:创建实例的不可散列类型,sqlalchemy

    我在尝试更新代码时遇到错误 https github com thrisp flask security https github com thrisp flask security从Python 2 7到3 3 给出以下最基本的实例 te
  • ASCII 转换

    我想将 ASCII 值转换为其相应的字符 所以我编写了这个简单的代码 public class Test public static void main String args int i 0 char ch c for i 0 i lt
  • 如何使用 Symfony2 表单清除字段值

    我正在编写自己的验证码类 当表单未验证时 出于显而易见的原因 我不想用之前的答案预先填充验证码输入 我只想在渲染之前清除输入 我发现了data选项仅适用于默认值 默认值会被用户输入的内容覆盖 我尝试了以下代码 form gt get cap
  • 具有边界约束的 scipy.optimize.leastsq

    我正在寻找 scipy numpy 中的优化例程 它可以解决非线性最小二乘型问题 例如 将参数函数拟合到大型数据集 但包括边界和约束 例如参数的最小值和最大值 优化 目前我正在使用 mpfit 的 python 版本 翻译自 idl 这显然
  • Python:为变量重新赋值(使用函数)[重复]

    这个问题在这里已经有答案了 可能的重复 Python 如何通过引用传递变量 https stackoverflow com questions 986006 python how do i pass a variable by refere
  • Chrome 扩展:如何根据 Ajax 请求重新加载/重新执行内容脚本

    我正在尝试执行某个网站的内容脚本 插入按钮或更改链接 但是我想在用户浏览网站时执行此操作 问题在于网页是在用户浏览时通过 ajax 请求动态构建的 我之前在我编写的扩展中通过将 JavaScript 实际注入到网页中解决了这个问题 我想知道
  • 数据源不支持服务器端数据分页

    我的屏幕上有一个 GridView 需要它来允许分页 Markup
  • 如何在 Visual Studio 2008 中对代码进行排序(按方法名称)?

    除了剪切和粘贴之外 是否有办法在 Visual Studio 2008 中对类中的方法进行排序 我喜欢有序的代码 您可以使用 Visual Studio 2005 2008 扩展区域化 https marketplace visualstu
  • 如何设置UITabBar触摸区域

    我遇到过UITabBar触摸面积问题 上方额外的触摸区域 约 5 个像素 UITabBar被算作是UITabBar 放置在该区域的所有物体都将被阻挡并且UITabBar反而会做出反应 我发现有些人问了同样的问题 以下链接 但无法得到答案 有
  • 如何在 Spring / Tomcat 中完全禁用 JDBC 连接池?

    我正在使用 Spring Data Source bean 来配置 JDBC 连接 返回裸露的 非池化 非托管的 JDBC 连接的最简单方法是什么 我想你正在寻找org springframework jdbc datasource Sim
  • 什么时候在 ASP.NET MVC 中使用 ViewBag/ViewData 是“可接受的”?

    我意识到最佳实践是使用强类型视图并在 ViewModel 中传递所有需要的数据 但我很好奇是否在某些情况下在 ViewBag ViewData 中传递数据实际上被认为是 最佳实践 在什么情况下首选 ViewBag ViewData 将数据传
  • Rails 4:一起使用 MySql 和 MongoDB

    我正在尝试结合使用 MongoDB mongoid 和 MySQL 在 Rails 4 中创建一个应用程序 但我无法设置它 我正在按照以下步骤操作 rails new myapp d mysql 然后将这些行添加到 Gemfile 中 ge
  • 接到电话后应用程序崩溃

    在我接到电话或拨打电话 以及其他未记录的中断 后 我的应用程序在恢复活动时收到 NullPointerException 任何人都可以向我解释它在哪里和 或如何修复它吗 当我的活动恢复时 它似乎正在调用 onCreate 并且它试图执行恢复
  • 如何使用空手道框架用默认值替换键

    我有一个 JSON 文件 如下所示 lastname displayName lastname dynamicKey displayName dynamicKey 当我尝试读取文件时 键和值没有更新 但是当我使用如下所示的 JSON 时 值
  • Team Foundation Server 要求提供登录凭据

    每次我打开 VS2010 和 或尝试连接到 Team Foundation Server 时 它都会要求我提供凭据 我已经对这个问题及其解决方案 包括这个网站 进行了广泛的搜索 但没有一个解决方案有效 尝试连接到 VS2010 中的 Tea
  • Hibernate 库和 Hibernate JPA 库之间的区别

    在可以将 Hibernate 库添加到项目的屏幕中 有两个选项 Hibernate 和 Hibernate JPA 2者有什么区别 谷歌搜索没有提供解释 我发现这提供了一个很好的解释 http elope wordpress com 200
  • scrapy 1.3中,yield请求和return请求有什么区别?

    他们似乎提供了相同的功能 最终通过管道或提要返回字典或项目 我有理由使用其中一种而不是另一种吗 与 return 相反 yield 不会退出函数并继续 与你的for循环 如果您使用 return 您的 for 循环将在第一次迭代后完成 了解
  • 实施 Kruskal 算法时测试电路

    我正在尝试编写一个程序来找到最小生成树 但我在使用该算法时遇到的一个问题是测试电路 在java中执行此操作的最佳方法是什么 好的 这是我的代码 import java io import java util public class Jun
  • 以二维数组作为参数调用函数[重复]

    这个问题在这里已经有答案了 我是 Java 开发人员 而不是 C 程序员 我正在尝试调用一些接收二维数组的函数 尝试如下 include