gpt4 book ai didi

c++ - 这个 Actor 有什么问题?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:21:10 26 4
gpt4 key购买 nike

有人告诉我以下是错误的代码,因为 z_strings 已经是一个字符数组。但是我真的不太了解 C++,所以我真的不知道用法在做什么或者为什么会出错。有人可以提供解释吗?

声明:char z_strings[3];

用法:MyFunction(myints, (char**)&z_strings, another_int_arg);

MyFunction 的定义:void MyFunction(int* my_ints, char** z_strings, int another_int_arg)

就上下文而言,这是同事的“代码审查”代码,它是故意破坏的;他用它来要求面试候选人修复错误的代码。然而,这位同事实际上已经离开了公司,唯一的笔记说这是一个糟糕的 Actor ,我正试图找出更多关于原因的细节,因为我很好奇。

我删除了我认为不相关的上下文,但对于完整的上下文,MyFunction 实际上是 GetPowers(p_int, (char**)&z_strings, 3); p_int 将是像 [2,3,4]z_strings 这样的数组将填充像 ['Hundreds','Thousands','Ten Thousands'],换句话说,此函数将数字幂转换为英语等价物。

最佳答案

与广为流传且错误教导的信念不同,数组不是指针。在大多数上下文中,它们可能退化为指针,但寻址运算符不是这些上下文之一。

如果z_strings的类型是char[3],那么&z_strings的类型就是char(*)[3 ]。它是一个指向三个字符数组的指针。并且指向数组的指针与指向指针的指针不兼容。

这就是你的类型转换出了什么问题。至于如何修复它,根据您所显示的小上下文,显而易见的解决方案是引入一个实际的指针:

char *p_z_strings = z_strings; //decay here
MyFunction(myints, &p_z_strings , another_int_arg); // no cast; exact match

根据您提供的添加 上下文,“显而易见”的解决方案现在明显不正确。仍然缺少一些细节,但如果我们假设 GetPowers 将为新字符串进行分配,我们就不需要额外的变量:

char* z_strings[3]; // Now we have an array of pointers
GetPowers(p_int, z_strings, 3); // It decays into a pointer to a pointer
// GetPowers populates it

关于c++ - 这个 Actor 有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47059830/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com