返回此功能的类型

时间:2013-09-11 20:50:44

标签: c++ function pointers

我的函数原型就是这个。

int * f4(int parm);

我的功能看起来像这样

int * f4(int parm)
{
    return &parm + 1;  
}

我的退货类型是否正确?因为我在调用函数时没有做任何事情。

这是我的电话

int *pointer1;
pointer1 = f4(319);
cout << pointer1 << endl;

它返回指针的地址,但我需要它来返回值,但我似乎无法让它工作。

使用

cout << *pointer << endl;

只显示0

2 个答案:

答案 0 :(得分:6)

问题是对象parm是该函数的本地对象。在函数调用结束后,获取并保持(即返回)指向它的指针是不合法的。

换句话说,parm“生命”,而函数存在。当函数返回其所有本地对象(例如parm)时,“die”。

作为评论中的crush注释,pointer1成为无效指针,也被亲切地称为“悬空”指针。

  

所以要说明这样做的正确方法!!

根据要求,有几种方法可以“正确”执行此操作:

  • 直接返回parm + 1,并更改函数的返回类型。这听起来并不像你真的需要一个指针

  • 将参数作为指针(或引用,这是C ++)并增加其指向值。如果您愿意,也可以返回它 - 返回它是有效的,因为它来自函数外部

  • 添加静态static int sparm; sparm = parm + 1并返回指向sparm的指针。这将使您的函数不可重入但它将起作用:static对象在函数调用结束时不会死亡

  • 分配(呃!不要!)指针的一些内存并返回


在仔细阅读代码后,很明显指针永远不会有效。从一开始它就是parm以外的一个时隙。

答案 1 :(得分:3)

返回指向局部变量的指针是个坏消息。 parm是一个函数参数,因此f4是本地参数。您将向调用者返回一个错误的指针,然后尝试取消引用它。那只会以泪水结束。