gpt4 book ai didi

c - C中的指针问题

转载 作者:行者123 更新时间:2023-11-30 18:55:03 24 4
gpt4 key购买 nike

我刚刚开始学习 C,有 Java 背景。我的代码中的几行遇到了问题。我试图复制我在其他线程中看到的内容,但坦率地说,它仍然给出错误。

无论如何,我只是想通过引用传递这些结构,但我收到了这四个错误。

Errors

printCard(&shuttleArray[i][j]);   // Line 183

其中 printCard() 的 header 如下所示:

void printCard(struct Card* card)

然后

struct Card shuttleArray[14][4];
initMapping(&shuttleArray); // Line 199
initMapping(&mapping); // Line 343

initMapping() 的 header 在哪里

void initMapping(struct Card* array[14][4])

最后是第 229 行

printSpaceShuttleWithoutWings(&shuttleArray, shuttleCount);   // Line 229

它的标题在哪里

void printSpaceShuttleWithoutWings(struct Card* shuttleArray[14][4], int shuttleCount)

感谢您的帮助。

最佳答案

void initMapping(struct Card* array[14][4])

声明一个函数,该函数采用指向struct Card的指针的二维数组。

struct Card shuttleArray[14][4];

不是指向struct Card的指针数组,因此不可能将其插入该参数槽中。这同样适用于 printSpaceShuttleWithoutWingsprintSpaceShuttleWithoutWings 内部,其中 shuttleArray 被声明为指针数组,

printCard(&shuttleArray[i][j]);

尝试将 struct Card** 插入 struct Card* 参数。

我认为解决这个问题的最明智的方法是编写

void initMapping(struct Card array[14][4]);
// or, equivalently, one of
//
// void initMapping(struct Card array[][4]);
// void initMapping(struct Card (*array)[4]);
//
// The same needs to be done for printSpaceShuttleWithoutWings.

...

initMapping(shuttleArray);

这声明 array 应是一个指针1,指向每个由四个 struct Card 组成的一维数组,并且 shuttleArray 在函数调用中衰减为指向其第一个子数组的指针。 array[i]shuttleArray 的第 i 子数组,表达式 array[i][j]&array[i][j] 按您的预期工作。

1在函数参数声明中,数组语法是为了易读;声明的参数仍然是一个指针。外部数组范围(如果给定)将被默默忽略。

旁注:本来可以调用电话

initMapping(&shuttleArray)

通过将 initMapping 声明为

进行编译
void initMapping(struct Card (*array)[14][4]);

...它将array声明为指向struct Card二维数组的指针。然而,这样做会使得在函数内部使用它变得更加麻烦;如果使用上面的代码,您可以编写 array[i][j],则必须使用此编写 (*array)[i][j]

关于c - C中的指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28795197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com