我的函数原型就是这个。
int * f4(int parm);
我的功能看起来像这样
int * f4(int parm)
{
return &parm + 1;
}
我的退货类型是否正确?因为我在调用函数时没有做任何事情。
这是我的电话
int *pointer1;
pointer1 = f4(319);
cout << pointer1 << endl;
它返回指针的地址,但我需要它来返回值,但我似乎无法让它工作。
使用
cout << *pointer << endl;
只显示0
答案 0 :(得分:6)
问题是对象parm
是该函数的本地对象。在函数调用结束后,获取并保持(即返回)指向它的指针是不合法的。
换句话说,parm
“生命”,而函数存在。当函数返回其所有本地对象(例如parm
)时,“die”。
作为评论中的crush
注释,pointer1
成为无效指针,也被亲切地称为“悬空”指针。
所以要说明这样做的正确方法!!
根据要求,有几种方法可以“正确”执行此操作:
直接返回parm + 1
,并更改函数的返回类型。这听起来并不像你真的需要一个指针
将参数作为指针(或引用,这是C ++)并增加其指向值。如果您愿意,也可以返回它 - 返回它是有效的,因为它来自函数外部
添加静态static int sparm; sparm = parm + 1
并返回指向sparm
的指针。这将使您的函数不可重入但它将起作用:static
对象在函数调用结束时不会死亡
分配(呃!不要!)指针的一些内存并返回
在仔细阅读代码后,很明显指针永远不会有效。从一开始它就是parm
以外的一个时隙。
答案 1 :(得分:3)
返回指向局部变量的指针是个坏消息。 parm
是一个函数参数,因此f4
是本地参数。您将向调用者返回一个错误的指针,然后尝试取消引用它。那只会以泪水结束。