指针数组作为函数参数

2024-02-12

我有一个关于 C/C++ 中数组和指针的基本问题。

假设我有:

Foo* fooPtrArray[4];

如何通过fooPtrArray变成一个函数? 我努力了:

int getResult(Foo** fooPtrArray){}  //  failed
int getResult(Foo* fooPtrArray[]){} // failed

我该如何处理指针数组?

EDIT:我曾经认为错误消息是由于传递了错误的指针数组,但从所有响应中,我意识到这是别的东西......(指针赋值)

Error msg:
Description Resource Path Location Type incompatible types in assignment of 
`Foo**' to `Foo*[4]' tryPointers.cpp tryPointers line 21 C/C++ Problem

我不太明白为什么它说:Foo* * 到 Foo*[4]。如果作为函数参数它们可以相互更改,为什么在赋值时会出现编译错误?

我尝试用最少的代码复制错误消息,如下所示:

#include <iostream>

using namespace std;

struct Foo
{
int id;
};

void getResult(Foo** fooPtrArray)
{
cout << "I am in getResult" << endl;
Foo* fooPtrArray1[4];
fooPtrArray1 = fooPtrArray;
}

int main()
{
Foo* fooPtrArray[4];
getResult(fooPtrArray);
}

Both

int getResult(Foo** fooPtrArray)

and

int getResult(Foo* fooPtrArray[])

int getResult(Foo* fooPtrArray[4])

会工作得很好(它们都是等价的)。

从你的问题中并不清楚问题是什么。什么“失败”?

当传递这样的数组时,传递元素计数通常也是有意义的,因为允许数组类型衰减为指针类型的技巧通常专门用于允许传递不同大小的数组:

int getResult(Foo* fooPtrArray[], unsigned n);
...
Foo* array3[3];
Foo* array5[5];
getResult(array3, 3);
getResult(array5, 5);

但是,如果您总是要传递严格包含 4 个元素的数组,那么使用不同类型的指针作为参数可能是一个更好的主意:

int getResult(Foo* (*fooPtrArray)[4])

在后一种情况下,函数调用将如下所示

Foo* array[4];
getResult(&array);

(注意&应用于数组对象的运算符)。

最后,由于这个问题被标记为 C++,在后一种情况下,也可以使用引用代替指针

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

指针数组作为函数参数 的相关文章

  • 捕获 .aspx 和 .ascx 页面中的异常

    问题说明了一切 请看以下示例代码 ul li li ul
  • EntityHydrate 任务失败

    我最近安装了 Visual Studio 11 Beta 和 Visual Studio 2010 之后 我无法在 Visual Studio 2010 中构建依赖于 PostSharp 的项目 因此我卸载了 Visual Studio 1
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • C# 中的 Stack<> 实现

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

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • 在 Mono 中反序列化 JSON 数据

    使用 Monodroid 时 是否有一种简单的方法可以将简单的 JSON 字符串反序列化为 NET 对象 System Json 只提供序列化 不提供反序列化 我尝试过的各种第三方库都会导致 Mono Monodroid 出现问题 谢谢 f
  • 如何从另一个数组值中过滤数组值并返回新数组? [复制]

    这个问题在这里已经有答案了 我有两个数组 all languages and taken languages 第一个包含所有语言 例如 200 种或其他语言 第二个包含之前选择的语言 从 0 到 200 种 我需要删除所有已采用的语言 ta
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • 用于在标头更改时重新编译的简单 C 项目的示例 makefile

    有谁有完整的 makefile 可以执行以下操作 如果 HEADER 文件发生更改 则重建项目 cpp 文件在 makefile 中列出 头文件未在 makefile 中列出 头文件允许与 cpp 文件具有不同的名称 部分cpp文件没有头文
  • 为什么这个 makefile 在“make clean”上执行目标

    这是我当前的 makefile CXX g CXXFLAGS Wall O3 LDFLAGS TARGET testcpp SRCS main cpp object cpp foo cpp OBJS SRCS cpp o DEPS SRCS
  • Libev,如何将参数传递给相关回调

    我陷入了 libev 中争论的境地 通常 libev 在类似的函数中接收包 接收回调 没关系 但是实际操作中 我们需要派遣一个亲戚 写回调 根据收到的包裹处理具体工作 例如 S RECV MSG pstRecvMsg S RECV MSG
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • 来自嵌入图像的 BitmapSource

    我的目标是在 WPF 窗口上重写 OnRender 方法中绘制图像 someImage png 它是嵌入资源 protected override void OnRender System Windows Media DrawingCont
  • 保证复制省略是否适用于函数参数?

    如果我理解正确的话 从 C 17 开始 这段代码现在要求不进行任何复制 Foo myfunc void return Foo auto foo myfunc no copy 函数参数也是如此吗 下面的代码中的副本会被优化掉吗 Foo myf
  • C# 获取数据表中所有重复行的计数

    我通过运行存储过程来填充数据集 并且从数据集中填充数据表 DataSet RawDataSet DataAccessHelper RunProcedure storedprocedureName this will just return
  • 在 azure blob 存储中就地创建 zip 文件

    我将文件存储在 Blob 存储帐户内的一个容器中 我需要在第二个容器中创建一个 zip 文件 其中包含第一个容器中的文件 我有一个使用辅助角色和 DotNetZip 工作的解决方案 但由于 zip 文件的大小最终可能达到 1GB 我担心在进
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • Array.of 与“[ ]”。何时使用 Array.of 而不是“[ ]”?

    当我发现时我正在读一些书Array of https developer mozilla org en docs Web JavaScript Reference Global Objects Array of 根据 MDN Array o
  • 任何人都可以清楚地告诉如何在不使用像 这样的预定义函数的情况下找到带有小数值或小数值的指数吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 例如 2 0 5 1 414 所以想要 我是 c 的新手 所以请解释简单的逻辑 如果不是复杂的逻辑也足够了 在数学中 从整数取幂到实数

随机推荐

  • PyQt4:如何迭代 QListWidget 中的所有项目

    目前 我在继承 QtGui QListWidget 的类中使用以下 while 循环来迭代所有项目 i 0 while i lt self count item self item i i 1 我希望我可以使用 for item in se
  • OllyDbg 无法调试 Visual Studio exe

    我刚刚使用以下简单代码创建了一个新的 vc exe include
  • 如何在 SSMS 单元格中输入“NULL”?

    在 SQL Server Management Studio 2012 中 我将数据键入 粘贴到表中 通过编辑前 200 行 每当我输入 粘贴时NULL在一个细胞中 一个NULL值已插入 显然它认为我的意思是NULL值而不是 NULL 文本
  • 地址范围:寿命不够长

    我对这两个看似相似的程序的结果感到惊讶 fn main let y int 31i println My number is y Output My number is 31 但是 这段代码给了我一个错误 fn main let y int
  • 在 GAE/python 中存储密码的最佳实践

    我需要在我的 GAE python2 7 应用程序中实现密码存储 我已经实现了 cookie 进行授权 我已经有了帐户 用户模型 并且我已经通过第三方进行了身份验证 现在我需要通过密码添加身份验证 客户请求 我希望安全地存储密码 我已经确定
  • 具有自定义字体的 TextView 未垂直居中

    我需要使用自定义字体 VAG Rounded 可能不相关 但字体会改变我的 TextView 的反应方式 在下图中 您可以看到两个具有黑色背景的文本视图 左边一种使用自定义字体 右边一种使用默认系统字体 Roboto 它们都有相同的 xml
  • gulp - 缩小 CSS 时排除文件

    我是 Gulp 新手 我已经能够成功安装 连接和缩小我的 js 和 css 文件 但是 有一个我想排除的 css 文件 print css 我已按照此处的说明进行操作 https www npmjs org package gulp ign
  • 仅捕获 arp-reply 数据包的 BPF 表达式

    有没有BPF http biot com capstats bpf html只捕获 arp reply 数据包的表达式 目前 我正在使用 Pcap4J 和以下 BPF 表达式 arp 和 dst 主机host和乙醚 dstmac where
  • 如何将 Firestore 查询转换为 Javascript 数组

    我正在尝试导出一个 firestore 函数 该函数执行查询并返回包含该查询中的对象的数组 我正在尝试从文档的子集合中获取数据 并获取返回的文档对象数组以呈现给客户端 我已经尝试了以下方法 但它不起作用 例如 对象返回空白 我认为这与承诺处
  • Scala 中函数组合的简洁语法?

    我正在学习 Scala 并遇到了以下任务 如果字符串为空则返回 null 否则将其大写 Apache Commons 中有两个函数组合在一起可以解决这个问题 在 Haskell 中我会这样写 upperCaseOrNull StringUt
  • Android 新手相机方向

    我正在使用相机工作面临相机方向问题 我在互联网上找到了一些答案 我认为这个答案可能最适合我 谁能给我详细的指导吗如何添加这个答案 https stackoverflow com questions 3841122 android camer
  • PG gem 不会安装在 Rails 应用程序中:Gem::Ext::BuildError: ERROR: 无法构建 gem 本机扩展

    我正在尝试将 Rails 应用程序部署到 Heroku 当我添加pggem 到我的 gemfile 并运行bundle install我收到错误 An error occurred while installing pg 1 1 3 and
  • android 可以像整数数组一样存储可绘制的 id 吗?

    我想要一个drawableid 整数值数组 我可以像这样存储integer array in res values XXX xml通过使用integer array标签 下面是声明的整数数组strings xml
  • Jupyter 笔记本内嵌图像中的光标位置和像素值

    我使用 Python 2 7 x 和 Jupyter Notebook matplotlib 和 pylab 后端以及内联标志 pylab inline 在活动单元格下方打印图像 我希望能够将光标移动到图像上并知道它的位置和像素值示例可以是
  • CSS 100% 宽度但避免滚动条

    这可能是一个已经解决了几十次的问题的变体 但 CSS 真的让我觉得自己像个傻瓜 我正在尝试构建一个可以通过多种方式定位和调整大小的小部件 这是一个非常简单的布局 固定高度的页眉 固定高度的页脚以及占用剩余空间的正文 整体宽度和高度各不相同
  • Crontab 无法在 Windows 上的 Ubuntu 上使用 Bash

    我正在尝试安排一个 bash 脚本在 Windows 10 中的 Windows 上的 Ubuntu 上使用 Bash 运行 每次我编写 cron 时 我都会在终端中收到以下错误消息 crontab installing new cront
  • wicket:child 标签可以嵌套在页面上的另一个组件下吗?

    在 Wicket 1 4 中 我试图允许子页面更改父页面中标签上的 CSS 类 我一直这样做 这种情况的奇怪之处在于我想要定位的标签包装子页面标记 这是我尝试过的简化片段 父页面 html div div
  • 简单登录unity c#脚本

    应该很简单 但仍然找不到直接答案 如何使用 C Unity 脚本记录简单的消息 我试过这个 Debug Log Hello Log 它不起作用 或者我没有找对地方 Debug Log Hello Log 可以在控制台选项卡 为了让您能够看到
  • 如何防止 Silverlight RIA 实体在我准备好之前附加到数据上下文

    我有一个用于简单 TODO 列表的 Silverlight 4 应用程序 我遇到的问题是数据绑定正在连接我的关系TODO对象 这会导致 RIA 数据上下文将其添加到DataContext TODOs在我想要它之前列出它 我想将该对象视为新的
  • 指针数组作为函数参数

    我有一个关于 C C 中数组和指针的基本问题 假设我有 Foo fooPtrArray 4 如何通过fooPtrArray变成一个函数 我努力了 int getResult Foo fooPtrArray failed int getRes