簡體   English   中英

在C函數中返回二維數組

[英]Return 2 dimension array in C function

我想用C語言編寫一個將二維數組返回到我的主函數的函數。

該函數為int類型返回動態分配的二維數組。

int ** myfunc(size_t width, size_t height) 
{
    return malloc(width * height * sizeof(int));
}

一旦不再使用,則必須free刪除。

編輯這僅為數組分配空間 ,該空間可以通過指針算術訪問,但不幸的是不能由諸如array[x][y]類的索引運算符訪問。

如果您想要這樣的話, 這里是一個很好的解釋。 歸結為這樣的事情:

int ** myfunc(size_t ncolumns, size_t nrows)
{
    int **array;
    array = malloc(nrows * sizeof(int *));
    for(i = 0; i < nrows; i++)
    {
        array[i] = malloc(ncolumns * sizeof(int));
    }
}

不能簡單地返回malloc( x * y * sizeof(type) );

當您嘗試將數組索引為二維數組時,這將產生分段錯誤。

int **a = malloc(10 * 10 * sizeof(int));

a[1][0] = 123;
a[0][1] = 321;

以上結果: Segmentation fault

您需要首先使用c/malloc()創建一個指針數組,然后迭代該指針數組並為每個指針的寬度分配空間。

void *calloc2d(size_t x, size_t y, size_t elem_size) {
    void **p = calloc(y, sizeof(void*));
    if(!p) return NULL;

    for(int i = 0; i < y; i++) {
        p[i] = calloc(x, elem_size);
        if(!p[i]) {
            free2d(y, p);
            return NULL;
        }
    }

    return (void*)p;
}

而且免費

void free2d(size_t y, void *matrix) {
    if(!matrix) return;

    void **m = matrix;
    for(int i = 0; i < y; i++) {
        if(m[i]) free(m[i]);
    }
    free(m);

    return;
}

我想這應該很簡單...

char **functioName(char param[][20])
{
  char[][20] temp = malloc(20 * 20 * sizeof char);


 //processing  
  return temp

}

如果您知道數組的大小,則可以執行以下操作:

int (*myfunc())[10] {
 int (*ret)[10]=malloc(10*10*sizeof(int));
 return ret;
}

此函數返回指向10個整數的10個數組的指針。

當然,您應該按原樣使用它,並且不要忘記在使用后釋放它。

暫無
暫無

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

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