用&符号返回

时间:2014-11-04 15:43:00

标签: c++ pointers struct return ampersand

我必须在函数中返回结构对象的指针,但我没有将它们存储为指针,因此我使用return &myStructObject;返回。它没有给出任何编译时错误,但我正在尝试做的是正确的吗?

3 个答案:

答案 0 :(得分:0)

如果您引用的结构对象是函数的本地对象,则不应返回该结构对象的地址。这是因为当您的函数返回对其调用者的调用时,所有局部变量都将从内存中销毁。

例如: -

以下是致命错误

int* myFunc ()
{
  int p = 4;            // memory is allocated for p.
  // do something.
  return &p;            // memory for p is deallocated and you are returning pointer to that memory 
}

答案 1 :(得分:0)

如果从函数返回后要返回其指针的struct变量仍在范围内,那么你所做的是正确的。

另一方面,如果有问题的struct变量是函数的局部变量,并且一旦从函数返回就会被销毁(释放),那么你将返回的指针将是dangling pointer,并且不能满足你的目的。

修改

“不会达到你的目的”,我的意思是它不会做你想象的那样!当你确定它没有按照你期望的那样做时,没有必要讨论它能做什么的危害!

答案 2 :(得分:-1)

如果你在一个函数中有一些本地的东西而你正在返回那个地址,那么它将会丢失,即无效。原因是您返回地址的函数将从堆栈中弹出,任何非静态(非全局)都将丢失。从本质上讲,程序存储器没有作为“终身”资源的任何东西都将消失。您可以将指针作为参数传递给函数,并取消引用它以修改指针指向的值。但是任何非静态(或非全局)并作为地址返回的内容都会导致您访问违规类型错误。