返回此功能的类型

use*_*688 2 c++ pointers function

我的函数原型就是这个.

int * f4(int parm);
Run Code Online (Sandbox Code Playgroud)

我的功能看起来像这样

int * f4(int parm)
{
    return &parm + 1;  
}
Run Code Online (Sandbox Code Playgroud)

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

这是我的电话

int *pointer1;
pointer1 = f4(319);
cout << pointer1 << endl;
Run Code Online (Sandbox Code Playgroud)

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

运用

cout << *pointer << endl;
Run Code Online (Sandbox Code Playgroud)

只显示0

cni*_*tar 6

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

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

作为crush注释中的注释,pointer1成为无效指针,也被亲切地称为"悬空"指针.

所以说出正确的方法!

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

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

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

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

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


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