簡體   English   中英

C 函數返回指針和動態數組

[英]C Function returning pointer and a dynamic array

我有一個函數可以創建一個動態數組,其大小為我選擇的整數。 代碼:

int *create(int n) {
    int *nn;
    nn = (int*)malloc(n*sizeof(int));
    return nn;
}

我在main()這樣稱呼它

int *nn
int n = 5; /* size = 5 */
nn = create(n);

我想我得到了int *create(...)部分,它應該將地址返回到我返回的 nn 的第一個位置。 但是我想知道,有沒有辦法在函數中不使用指針而是修改return nn; 部分以便我仍然返回動態數組nn的地址?

我想刪除**create

您可以修改代碼以設置按地址傳遞給函數的指針,如下所示:

void create(int n, int** res) {
    *res = malloc(n*sizeof(int));
}

以下是您現在調用此函數的方式:

int *nn
int n = 5;
create(n, &nn);

我只想使用一個參數,並且能夠通過return

你可以直接返回malloc的結果,因為這就是你的函數所做的一切:

int *create(int n) {
    return malloc(n*sizeof(int));
}

該調用也可以與聲明結合使用:

int n = 5;
int *nn = create(n);

當然,如果你這樣做,你還不如做慣用語

int *nn = malloc(n*sizeof(*nn));

並完全刪除create功能。

你可以這樣做:

int *create(int n) 
{
    return malloc(n*sizeof(int));
}

這樣您就不需要在create()函數中使用臨時變量。 但是我認為創建一個只調用malloc的函數沒有意義。

如果你希望你的函數返回一個整數數組,你需要你的函數采用int *create()的形式,因為一個數組可以被認為是指向它的第一個元素的指針,在你的情況下是一個整數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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