【发布时间】:2014-11-29 14:05:09
【问题描述】:
我想我可能误解了在 C 函数中将指针作为参数传递是如何工作的。过去,我曾作弊并使用了全局变量和包含所有函数的大型单个 C 文件。我正在尝试学习如何使用单独的 C 文件并将它们链接到单个可执行文件中。
Room 是一个类型化结构。
我在一个名为 functions.h 的受保护头文件中对函数进行了原型设计:
void init_rooms(Room *rooms[], Room *current_room);
/* (pointer to the room struct array, pointer to current room) */
然后我在 main.c 和 functions.c 中都包含了该头文件。
functions.c中的函数定义为:
void init_rooms(Room *rooms[], Room *current_room){
current_room = rooms[0];
...}
我在 main.c 中这样调用函数:
Room * current_room; /* pointer to current player location */
Room * rooms = malloc(sizeof(struct room)*NUM_ROOMS); /* allocate memory for rooms */
init_rooms(rooms, current_room);
我得到这个错误:
main.c|11|error: incompatible pointer types passing 'Room *' (aka 'struct room *') to parameter of type 'Room **' (aka 'struct room **'); take the address with & [-Werror,-Wincompatible-pointer-types]|
现在,我很确定我没有在这里定义任何指向指针的指针,而且在我看来,我的类型都是一样的。为什么编译器说参数是**type?
我在 Linux 上使用 Clang,如果这有什么不同的话。
编辑:我也尝试按照编译器的建议取消引用指针,但它给了我一个不同的错误。
【问题讨论】:
-
clang 错误对我来说真的很清楚。
-
如果我清楚,我就不会打扰你们了!
-
Room *rooms[]:rooms是Room的指针数组。Room * rooms是指向Room的指针。 -
谢谢 BLUEPIXY,我是个白痴。
-
@Andomonir 抱歉,我不是故意粗鲁的,我的建议是仔细阅读那个错误,并且鉴于 clang 通常有很好的错误消息,这个错误很容易理解,因为你似乎有点理解指针基础知识。
标签: c function pointers struct