(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::vectorstd::array 作为返回类型,然后使用 return 1, 2, ..., N ;

【问题讨论】:

物有所值 - 试一试会更快。 您要的是 C 还是 C++?在 C++ 中,您将使用 std::vectorstd::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++) 在同一行初始化并返回数组的主要内容,如果未能解决你的问题,请参考以下文章

C语言【函数 数组 指针】利用指针求一维数组的数据元素之和

如何在返回数据的同一行初始化一个新的 int 数组? [复制]

如何在 Swift 的 PickerView 中返回两个单独的数组

C语言中,return语句怎么样返回一个数组?

高手来,excel在一组数组中查找值,并返回对应的某一列的值,怎么实现

C/C++系列数组去重代码实现