【发布时间】:2019-08-29 13:55:58
【问题描述】:
我有一个由某个函数返回的结构:
struct Abc {
char *a;
int b;
};
static struct Abc foo() {
struct Abc mystruct;
mystruct.a = "asdf";
mystruct.b = 1;
return mystruct;
}
如果我调用struct Abc new_abc = foo();,存储在new_abc 中的结构是否可能被程序覆盖?
如果我理解正确,mystruct 是一个自动变量,在范围内是本地的。因此,引用可能会悬空,因此可以被覆盖。
【问题讨论】:
-
C 中正式没有references。如果你指的是指针,那么仔细看看你显示的代码没有使用指针。
-
int x = bar();和struct Abc y = foo();的工作方式没有任何区别。它们都将函数返回的值复制到变量中。变量和参数值总是在 C 中复制,即a = b;总是意味着将b的内容复制到a。请注意,在指针的情况下,变量的内容是地址,它是一个数字,再次简单地从一个地方复制到另一个地方。
标签: c struct scope return-value