【发布时间】:2021-02-04 22:15:12
【问题描述】:
我是 C 新手,只是一个关于返回结构的问题。我听到人们说返回一个结构是可以的。例如:
struct MyObj{
int x,y,z;
};
struct MyObj foo(){
struct MyObj foo_a;
foo_a.x = 10;
foo_a.y = 10;
foo_a.z = 10;
return foo_a;
}
int main () {
struct MyObj main_a = foo();
return 0;
}
我的问题是:
foo_a在foo的栈中,所以在foo完成后,栈将被展开,这意味着foo_a实际上并不存在于main函数的栈中,指针@987654327 @ 那main 持有其实是一个非法指针,那它是怎么工作的呢?
【问题讨论】:
-
main holds is actually an illegal pointer但没有指针。main_a不是指针 -
返回一个局部变量的副本是可以的——你总是用返回
int的函数来做这件事。不好的是试图返回一个指向局部变量的指针;指针的副本返回OK,但它指向的数据不再存在,导致问题。 -
@JonathanLeffler 是的,我知道,这就是为什么我问为什么人们说不使用 malloc 就可以返回结构
-
因为您返回的是结构的副本,而不是指向结构的指针。就像您返回
int的副本,而不是指向int的指针。 -
@JonathanLeffler 对不起,我不明白,你的意思是
foo函数通过在main方法的堆栈中写入值来返回结构的副本main_a是?
标签: c struct return-value allocation