从不兼容的指针类型警告初始化。找不到问题

时间:2010-12-28 17:04:08

标签: c arrays pointers multidimensional-array double-pointer

我假设这个警告正在崩溃我的应用程序。我正在使用objective-c作为iOS应用程序。 Xcode不提供堆栈跟踪或任何东西。没用。

我将此作业作为全局变量:

int search_positions[4][6][2] = {{{0,-2},{0,1},{1,-1},{-1,-1},{1,0},{-1,0}}, //UP
    {{-2,0},{1,0},{-1,1},{-1,-1},{0,1},{0,-1}}, //LEFT
    {{0,2},{0,-1},{1,1},{-1,1},{1,0},{-1,0}}, //DOWN
    {{2,0},{-1,0},{1,1},{1,-1},{0,1},{0,-1}} //RIGHT 
};

因此search_positions不是指向整数指针的指针吗?

为什么这会给出“从不兼容的指针初始化”?

int ** these_search_positions = search_positions[current_orientation];

当然这只是一个指向数组的整数指针的指针,由current_orientation所取代?

我在这里缺少什么?我以为我现在知道了。 :(

谢谢。

2 个答案:

答案 0 :(得分:4)

search_positions[current_orientation]不属于int**类型;它的类型为int[6][2]search_positions不是指针;它是一个数组。

如果您获取数组的地址,则指向search_positions[current_orientation]的指针将为int(*)[6][2]类型:

int (*these_search_positions)[6][2] = &search_positions[current_orientation];

或类型int(*)[2]如果你不取数组的地址而是让数组到指针的转换发生:

int (*these_search_positions)[2] = search_positions[current_orientation];

答案 1 :(得分:1)

指针不是数组,数组不是指针

search_positions被定义为'包含2个int s的6个数组的4个数组的数组。这使search_positions[current_orientation]成为包含2个int s'的6个数组的数组 这个数组可以隐式转换为指针,但这只会给你一个指向2 int s(int (*)[2])数组的指针。这是与您使用的“指向int”的指针不同的类型,两者之间没有合适的转换。

要解决此问题,您可以将these_search_positions声明为

int (*these_search_positions)[2] = search_positions[current_orientation];