在下面的示例中,我不明白为什么会出现此错误:
test.c:3:6: error: array type has incomplete element type
这里,编译器应该考虑一个完整的类型,即
[2][3]
,因为每个子元素的大小都是3。那么,问题在哪里?long foo[2][] = {
{2,3,4},
{5,6,7}
};
如果我使用
foo[2][3]
完成类型,将得到以下错误:test.c:9:5: note: expected ‘long int *’ but argument is of type ‘long int (*)[3]’
int bar(long* list, size_t size)
使用此示例:
int bar(long* list, size_t size);
int main() {
bar(&foo[0], sizeof(foo[0]));
return 0;
}
我怎样才能修好它?
最佳答案
在这里,编译器应该考虑一个完整的类型,即[2][3],因为每个子元素的大小都是3。那么,问题在哪里?
如果你喜欢的话:
long foo[2][] = {
{2,3,4},
{5,7}
};
在这种情况下编译器应该做什么?是
[2][2]
还是[2][3]
?在C语言中,只能省略数组最左边的维度。所以,你可以:
long foo[][3] = {
{2,3,4},
{5,6,7}
};
相关职位:why c/c++ allows omission of leftmost index of a multidimensional array in a function call?
注意:应为“long int”,但参数的类型为“long int()[3]”
整数条(长*列表,大小)
这是因为您传递的类型与预期的类型不匹配。我个人的选择是:
int bar(long (*list)[3], size_t size) {
}
打电话给:
bar(foo, sizeof foo/sizeof foo[0]);
但也有其他办法。见:How to pass 2D array (matrix) in a function in C?
关于c - 长foo [2] []中的类型元素不完整,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37206957/