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
问题是该对象parm是该函数的本地对象.在函数调用结束后接受并保持(即返回)指向它的指针是不合法的.
换句话说,parm当函数存在时,"生命".当函数返回其所有本地对象(例如parm)"die"时.
作为crush注释中的注释,pointer1成为无效指针,也被亲切地称为"悬空"指针.
所以说出正确的方法!
根据要求,有几种方法可以"正确"执行此操作:
parm + 1直接返回,并更改函数的返回类型.听起来你真的不需要指针
将参数作为指针(或引用,这是C++)并递增其指向值.如果您愿意,也可以返回它 - 返回它是有效的,因为它来自函数外部
添加一个静态static int sparm; sparm = parm + 1并返回指针sparm.这将使您的函数不可重入但它将起作用:static当函数调用结束时,对象不会死亡
分配(呃!不要!)指针的一些内存并返回
在仔细阅读代码后,很明显指针永远不会有效.从一开始它就是一个超出可用内存的插槽parm.