【问题标题】:Weird incompatible pointer type error奇怪的不兼容指针类型错误
【发布时间】:2012-02-18 21:55:56
【问题描述】:

我有这段看似无辜的代码:

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 位。

【问题讨论】:

    标签: c types


    【解决方案1】:

    2D 数组与双指针不兼容(考虑 2D 数组在内存中的布局方式,以及如何对其进行索引需要了解其中一个维度)。

    C FAQ 的Question 6.18 处理了这个确切的主题。

    【讨论】:

      【解决方案2】:

      试试这样的:

      void generate_heightmap(float terrain[][1500]) 
      

      还有一个关于这个主题的C FAQ。基本上,您可以将数组作为指针传递给函数,因为它们会衰减为指针。但它们不会递归衰减。

      例如,如果您认为terrain[2] 的含义是有意义的。意思是地形的第三个元素:获取地址:terrain_addr + 2 * element_size

      所以很明显,此时您需要知道terrain[x] 对象有多大。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-07
        • 2010-10-19
        • 2011-02-27
        • 2016-06-18
        • 1970-01-01
        相关资源
        最近更新 更多