在 C 中返回二维数组
Returning a 2-dimensional array in C
这很愚蠢,但我在获取正确的类型签名或其他内容时遇到了问题。我想要一个函数 return 一个二维数组(一维大小固定,另一维大小可变)但我做错了。最小示例:
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;
}
但是我没有正确的签名,因为 gcc 抱怨:
error: incompatible types when assigning to type 'uint32_t[8]' from type 'uint32_t (*)[8]'
您不能使用:
uint32_t arr[sz][8] = makeit(sz);
因为 VLA 可能无法初始化。
使用:
uint32_t (*arr)[8] = makeit(sz);
查看它在 http://ideone.com/iuqtlJ 的工作情况。
这很愚蠢,但我在获取正确的类型签名或其他内容时遇到了问题。我想要一个函数 return 一个二维数组(一维大小固定,另一维大小可变)但我做错了。最小示例:
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;
}
但是我没有正确的签名,因为 gcc 抱怨:
error: incompatible types when assigning to type 'uint32_t[8]' from type 'uint32_t (*)[8]'
您不能使用:
uint32_t arr[sz][8] = makeit(sz);
因为 VLA 可能无法初始化。
使用:
uint32_t (*arr)[8] = makeit(sz);
查看它在 http://ideone.com/iuqtlJ 的工作情况。