我有一段看似无辜的代码:
void generate_heightmap(float **terrain) {
}
int main(int argc, char **argv) {
float terrain[1500][1500];
generate_heightmap(terrain);
return 0;
}
但是当我尝试编译它时,我得到了这些奇怪的错误,原因可能是什么?
test.c||In function ‘main’:|
test.c|8|warning: passing argument 1 of ‘generate_heightmap’ from incompatible pointer type [enabled by default]|
test.c|1|note: expected ‘float **’ but argument is of type ‘float (*)[1500]’|
||=== Build finished: 1 errors, 1 warnings ===|
我有GCC 4.6.1和Ubuntu 11.11 64位。
答案 0 :(得分:5)
2D数组与双指针不兼容(考虑如何在内存中布置2D数组,以及如何将索引编入其中需要了解其中一个维度。)
这个精确的主题在C FAQ的Question 6.18处理。
答案 1 :(得分:3)
尝试这样的事情:
void generate_heightmap(float terrain[][1500])
这个主题还有一个C FAQ。基本上你可以将数组作为指针传递给函数,因为它们会衰减为指针。但它们不会递归衰减。
如果您认为terrain[2]
的含义是有道理的。它意味着地形的第三个要素:获取地址:terrain_addr + 2 * element_size
。
所以很明显,你需要知道terrain[x]
对象有多大。