此函数的返回类型

Return type for this function

本文关键字:返回类型 函数      更新时间:2023-10-16

我的函数原型是这样的。

int * f4(int parm);

我的函数看起来像这样

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

我的返回类型是否正确?因为当我调用函数时它没有做任何事情。

这是我的呼唤

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

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

cout << *pointer << endl;

仅显示 0

问题是该

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

换句话说,parm函数存在时"活着"。当函数返回其所有本地对象(如parm)时,"die"。

正如crush注释中指出的那样,pointer1变成了一个无效的指针,也被亲切地称为"悬空"指针。

所以展示正确的方法!!

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

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

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

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

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


在更仔细地阅读代码后,很明显指针永远不会有效。从一开始,它就超出了可用内存的一个插槽 parm .

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