(C/C++) 在同一行初始化并返回数组
Posted
技术标签:
【中文标题】(C/C++) 在同一行初始化并返回数组【英文标题】:(C/C++) Initialize and return array in the same line 【发布时间】:2020-11-16 16:24:41 【问题描述】:我想知道如何使用 c/c++ 在同一行上初始化并返回一个数组。
我的直觉说语法应该是这样的:return (int8_t*) hours, minutes, seconds;
我说的对吗?演员是强制性的吗?或者有其他/更好的方法吗?
编辑:我问这个是因为我现在无法测试代码。有几天我不会在电脑前。
回答:
对于 C,请按照已验证答案中的步骤进行操作 对于 C++,您可以使用std::vector
或 std::array
作为返回类型,然后使用 return 1, 2, ..., N ;
【问题讨论】:
物有所值 - 试一试会更快。 您要的是 C 还是 C++?在 C++ 中,您将使用std::vector
或 std::array
作为返回类型,然后使用 reutrn 1, 2, ..., N ;
为什么你需要在你可以坐在电脑前回答这个问题?对不起,但这不是问题不清楚的借口。请附上minimal reproducible example 以及您遇到的任何编译器错误或解释您在代码中遇到的问题
另外,FWIW,如果你有互联网连接,你就有一个编译器。这里有几个在线编译器:One、Two、Three
请考虑您的问题和答案不仅适合您。未来的读者会期待 C 或 C++ 的答案,当他们找到不同语言的答案时,他们会感到失望。你基本上是一次问两个问题
【参考方案1】:
这不会像你期望的那样工作。
您尝试做的确切语法是:
return (int8_t [])hours, minutes, seconds;
这会创建一个数组类型的复合文字。但是,此文字具有封闭范围的生命周期。因此,当函数返回时,返回的指针现在指向无效内存,并试图取消引用该指针调用 undefined behavior。
您需要动态分配内存,然后分配数组的每个成员:
int8_t *p = malloc(3 * sizeof(int8_t));
p[0] = hours;
p[1] = minutes;
p[2] = seconds;
return p;
【讨论】:
@EricPostpischil 啊,是的,已更新以考虑到这一点。malloc
版本应该使用int8_t
以与原始版本保持一致。以上是关于(C/C++) 在同一行初始化并返回数组的主要内容,如果未能解决你的问题,请参考以下文章
如何在返回数据的同一行初始化一个新的 int 数组? [复制]
如何在 Swift 的 PickerView 中返回两个单独的数组