这很愚蠢,但我很难得到正确的类型签名或其他东西。我想让一个函数返回一个二维数组(一个是固定大小,另一个是变量),但我做错了。最小示例:

void useit(unsigned long sz) {
    uint32_t arr[sz][8] = makeit(sz);
    // Do something useful with arr here
}

// Stub function for allocating and filling an array
uint32_t (*makeit(ulong sz))[8] {
    uint32_t (*arr)[8] = malloc(8*sz*sizeof(int));
    int i, j;
    for (i = 0; i < sz; i++) {
        for (j = 0; j < 8; j++) {
            arr[i][j] = 10*i+j+11;
        }
    }
    return arr;
}

但我没有签名权,因为海合会抱怨:
错误:从类型“uint32_t(*)[8]分配到类型“uint32_t[8]时,类型不兼容

最佳答案

不能使用:

uint32_t arr[sz][8] = makeit(sz);

因为VLAs可能无法初始化。
使用:
uint32_t (*arr)[8] = makeit(sz);

看到它在http://ideone.com/iuqtlJ工作。

关于c - 在C中返回二维数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35207986/

10-11 07:51