簡體   English   中英

從函數返回指針

[英]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的生存時間將結束。 之后(通過返回的指針)訪問此數組是未定義的行為。

一個簡單的解決方案是使dstatic變量,以使它的生存期一直持續到程序結束:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM