C语言结构体传参及分数交换函数编译报错求助
C语言结构体分数交换函数的错误修正
原代码中的核心问题:
- 结构体定义顺序错误:函数声明时
struct HighestScore还未定义,C语言要求使用结构体前必须先完成定义。 - 函数声明与定义不匹配:声明的参数是结构体值传递,实际定义的是指针传递,两者类型不一致。
- 大小写敏感问题:结构体成员定义的是
Score(大写S),但代码中多处写成score(小写s);函数参数名Player/CurrentPlayer在函数内被写成小写的player/currentPlayer,C语言区分大小写,会导致未定义标识符错误。 - 结构体指针访问成员错误:指针类型的结构体变量需要用
->访问成员,而非.。 - 交换逻辑错误:原代码错误地将结构体指针赋值给int类型成员,且未正确实现分数交换逻辑。
修正后的完整代码:
#include <stdio.h> // 先定义结构体,再声明函数 struct HighestScore { char name[20]; int Score; }; // 函数声明与定义保持一致,使用指针传递 void SwapScore(struct HighestScore *Player, struct HighestScore *CurrentPlayer); int main() { struct HighestScore Player; struct HighestScore CurrentPlayer; printf("Enter your first name: "); // name是数组名,本身就是地址,不需要加& scanf("%s", CurrentPlayer.name); Player.Score = 1000000000; CurrentPlayer.Score = 10; // 传递结构体变量的地址给指针参数 SwapScore(&Player, &CurrentPlayer); // 打印验证交换结果 printf("Player's score: %d\n", Player.Score); printf("CurrentPlayer's score: %d\n", CurrentPlayer.Score); return 0; } void SwapScore(struct HighestScore *Player, struct HighestScore *CurrentPlayer) { // 临时存储其中一个分数 int temp = Player->Score; // 交换两个结构体的Score成员 Player->Score = CurrentPlayer->Score; CurrentPlayer->Score = temp; }
额外说明:
scanf("%s", CurrentPlayer.name)中,name是数组首地址,不需要加&,原代码的&CurrentPlayer.name属于冗余写法。- 使用指针传递结构体是因为如果传值的话,函数只会操作结构体的副本,无法修改原变量的值,这也是实现原变量分数交换的核心要求。
内容的提问来源于stack exchange,提问作者bvghb218 _
相关产品推荐
相关产品推荐

