gpt4 book ai didi

C - 参数的类型为 struct

转载 作者:行者123 更新时间:2023-11-30 19:37:51 25 4
gpt4 key购买 nike

我的函数的两个参数出现错误:

//incompatible type for argument of swapStruct
//expected Men100mParticipant but argument is of type struct <anonymous>

我的代码是这样的:

int main(){
...

swapStruct(phaseToBeSorted->phase_result[j-1], phaseToBeSorted->phase_result[j]); //error

...
}

phaseToBeSorted 的类型为 Men100mPhaseDetails,定义为:

typedef struct Men100mPhaseDetails{
char* nameCurrentPhase;
int current_phase;
Men100mParticipant phase_result;
} Men100mPhaseDetails * Men100mPhaseDetails;

而 pase_result 应该是 Men100mparticipant 的数组。 typedef 按原样给出,我无法更改它。

这是Men100m参与者的声明:

typedef struct {
char nameOfParticipant[MAX_LEN_NAME];
double* scores[4];
} Men100mparticipant, *Men100mParticipant;

这是函数 swapStruct 的声明:

static void swapStruct(Men100mParticipant a, Men100mParticipant b);

我不明白问题是什么,我很高兴获得解决问题的帮助。

最佳答案

您需要使用:

swapStruct(&phaseToBeSorted->phase_result[j-1], &phaseToBeSorted->phase_result[j]);

编译器已尽力,但结构类型名称令人困惑。

It actually work but why is a '&' needed?

phaseRoBeSorted->phase_result[j-1] 的类型是带有两个小写 p 的 Men100mparticipant — 因此它是一个结构体。 swapStruct 函数采用两个 Men100mParticipant 类型的参数(带有大写的 P),因此它采用两个指针。当然,& 传递数组元素的地址,以便函数获取指针,而不是结构的副本。

<小时/>

这个typedef(似乎是由类(class)讲师给出的,无法更改)是可怕的:

typedef struct { … } Men100mparticipant, *Men100mParticipant;

第一个字母 P 的大小写决定了该类型是否是指针,这是一场灾难。一般来说,Is it a good idea to typedef pointers?说“不”。当有需要时(我不相信这是可能需要的示例),使区别比在名称中使用大写和小写部分更清楚。

关于C - 参数的类型为 struct <anonymous>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39190431/

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