c++ - (C/C++) 在同一行初始化并返回数组
问题描述
我想知道如何使用 c/c++ 在同一行上初始化和返回一个数组。
我的直觉说语法应该看起来像这样:return (int8_t*) {hours, minutes, seconds};
我对么?演员是强制性的吗?或者有另一种/更好的方法吗?
编辑:我问这个是因为我现在无法测试代码。有几天我不会在电脑前。
回答:
- 对于 C,请按照已验证答案中的步骤进行操作
- 对于 C++,您将使用 a
std::vector
orstd::array
作为返回类型,然后有return { 1, 2, ..., N };
解决方案
这不会像您期望的那样工作。
您尝试执行的操作的确切语法是:
return (int8_t []){hours, minutes, seconds};
它创建了一个数组类型的复合文字。但是,此文字具有封闭范围的生命周期。因此,当函数返回时,返回的指针现在指向无效内存,并试图取消引用该指针调用未定义的行为。
您需要动态分配内存,然后分配数组的每个成员:
int8_t *p = malloc(3 * sizeof(int8_t));
p[0] = hours;
p[1] = minutes;
p[2] = seconds;
return p;
推荐阅读
- c++ - 为什么复制赋值运算符返回 *this?
- php - Redux 框架自定义 Rest Api / 导出
- javascript - 使用javascript从浏览器打开android应用
- rx-swift - RxCocoa 中的 UICollectionViewDelegate
- r - 桑基图、冲积层、R 中的 ggalluvial – 三个数据块:基线-流(许多时间点)-结果
- uwp - 是否可以像在 Edge 中那样将 Cortana 集成到自定义应用程序?
- apache-kafka - Kafka 组再平衡会导致存活的消费者越来越少吗?
- python - for 循环,并且 url.remove() 只影响所有其他条目
- reactjs - 如何轻松地与 redux 解耦?
- mongodb - 从数组中删除重复项而不使用 $unwind