此函数的返回类型
Return type for this function
我的函数原型是这样的。
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
的局部参数。 您正在返回指向调用方的错误指针,然后尝试取消引用它。 那只会以眼泪结束。
相关文章:
- 如何获取std::result_of函数的返回类型
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 函数作为模板参数,是否对返回类型强制约束
- C++中函数的向量返回类型引发错误
- 检查函数返回类型是否与STL容器类型值相同
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 为什么 c++(g++) 不允许模板返回类型和函数名称之间有空格?
- 为什么返回类型的'const'限定符对标有 __forceinline/内联的函数没有影响?
- 在 c++ 中将函数返回类型指定为模板参数
- 使用 SWIG 更改生成的 CS 函数中的返回类型
- C++ 这里有一个返回 (24) 的布尔返回类型函数
- 使用SFINAE来检测void返回类型函数的存在
- 模板返回类型函数如何在C++中工作
- 如何在返回类型函数模板的专用化中使用派生类型?( "couldn't infer template argument" )
- Bon appetit :从 int 返回类型函数在 main() 中打印字符串
- 在引用或指针返回类型函数上输入
- 在后面的返回类型函数语法中,auto关键字背后是否有意图
- 我可以在c++中重写字符串返回类型函数吗?