【发布时间】:2015-05-12 15:33:50
【问题描述】:
在 C 中返回带有数组数据成员的结构是否安全? 类似的东西
struct my_str {
int v[5];
};
struct my_str ret_stupid() {
struct my_str rval;
/*do something..*/
return rval;
}
我不知道为什么...我有点困惑。 (我已经尝试过了,它确实有效)。是否有一些标准来解释此操作实际上是如何执行的?我的意思是结构返回和赋值的机制也有助于更好地理解。
【问题讨论】:
-
my_str包含 5 个ints,当你返回结构体时会被复制。 -
@Javia1492 您链接的问题不是这个问题;是什么让你相信它是?
-
@Lukkio 它的工作方式取决于实现,但您应该期望结构被返回它的函数复制到堆栈中,然后调用者将其副本从堆栈中取出。如果您的调用者没有返回结构的函数的有效原型,您会期望结果损坏(但无论是否损坏,这将是未定义的行为)。