[英]Returning pointer from function
为什么此代码不起作用? 我已经通过传递指向函数的指针找到了解决方法,但是我想知道是否有更简单的解决方案?
#include <stdio.h>
int* func() {
int d[3];
for (int f = 0; f < 3; f++)
d[f] = 42;
return d;
}
int main() {
int* dptr;
dptr = func();
printf("Hi\n");
for (int f = 0; f < 3; f++)
printf("%d\n",dptr[f]);
return 0;
}
return d;
,您将返回一个指向局部变量的指针,即一旦函数func
完成,数组d
的生存时间将结束。 之后(通过返回的指针)访问此数组是未定义的行为。
一个简单的解决方案是使d
为static
变量,以使它的生存期一直持续到程序结束:
int* func() {
static int d[3];
但是请注意,该变量d
在程序中仅存在一次,因此一个调用的结果可能会在以后更改。 考虑使用std::vector<int>
作为返回类型,或将要更改的数组作为函数参数传递给void func(int[] d) {
最简单的解决方法是使用std :: array(这是首选方法)
#include <array>
std::array<int, 3> do_something() {
std::array<int, 3> arr = {1, 2, 3};
return arr;
}
int main() {
do_something()[0];
}
最好的部分是编译器将就地构造它,这意味着不会因复制而损失性能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.