[英]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.