如何解决C,指针-使用struct Arrays初始化嵌套结构的函数为细节和清晰度而编辑
学习C时,我对指针和初始化结构感到困惑。
我有struct PlayerType和struct TeamType,在头文件中声明了一个初始化函数。该文件如下所示:
typedef struct {
int number;
int heaight; //inches
int weight; //pounds
char *name;
} PlayerType;
typedef struct {
char *name;
PlayerType players[12];
} TeamType;
PlayerType* initializePlayer(int,int,char*);
TeamType* initializeTeam(char*,PlayerType*);
我想在init.c文件中编写函数来初始化各种球队和球员,但是我不知道它如何与指针等一起工作。假设我有一个函数要初始化一个具有动态分配内存的播放器,该函数将返回一个播放器(用whoami的修复程序编辑,谢谢!):
PlayerType* initializePlayer(int number,int height,int weight,char *name){
PlayerType* plyr = (PlayerType*)malloc(sizeof(PlayerType)); // should be typecasted and wrong sizeof argument
if(plyr != NULL){
plyr->number = number;
plyr->name = name;
plyr->weight = weight;
plyr->height = height;
}
return plyr;
}
(编辑:代码工作正常,没有编译其他文件-就像我说的那样,对C来说很新) 这使我在编译时一团糟,(...)
在我的主要职能中,我已经初始化了一些球员,但我不知道如何正确初始化团队,然后将球员添加到其中。
int main() {
PlayerType plyr1 = initializePlayer(13,75,190,"Bob Smith");
PlayerType plyr2 = initializePlayer(16,80,200,"Danny Clark");
PlayerType plyr3 = initializePlayer(28,91,210,"Mike Green");
PlayerType plyr4 = initializePlayer(20,103,225,"Alex Albert");
free(plyr1);
free(plyr2);
free(plyr3);
free(plyr4);
return 0;
}
一切都很好,也很好。我不知道的是如何使我的initializeTeam函数与播放器数组一起使用。我的直觉是:
TeamType* initializeTeam(char* name,PlayerType players[]) {
TeamType* team = (TeamType*) malloc(sizeof(team));
if(team != NULL) {
team->name = name;
team->players = players[12];
}
return team;
}
我认为这将采用大小为12的玩家结构数组并将其存储在团队结构的玩家属性中。这给了我assignment to expression with array type
编译时的知识,但我想不出代码播放器中的任何地方都没有定义为数组,这是我的想法。
team->players[0] = plyr1;
team->players[1] = plyr2;
team->players[2] = plyr3;
....
预先感谢,希望这次我的问题正确提出。
解决方法
我在您的代码中看到了一些错误
-
忘记包含
必须使用malloc和free函数
结构定义中的 -
typos
-
initializePlayer函数中的声明错误
-
initializePlayer函数返回的指针不是结构
-
使用malloc分配内存时,sizeof类型错误,sizeof(* plyr)是bug
这里是固定代码
#include <stdio.h>
#include <stdlib.h> // include stdlib for malloc function
typedef struct {
int number;
int height; // inches,typos height or heiaght
int weight; // pounds
char *name;
} PlayerType;
typedef struct {
char *name;
PlayerType players[12];
} TeamType;
PlayerType* initializePlayer(int,int,char*); // fix char to char*
int main() {
PlayerType* plyr1 = initializePlayer(13,75,190,"Bob Smith");
printf("Superstar %s,weighing %d pounds and standing %d inches tall,wearing number %d",plyr1->name,plyr1->weight,plyr1->height,plyr1->number);
free(plyr1);
return 0;
}
PlayerType* initializePlayer(int number,int height,int weight,char *name){
PlayerType* plyr = (PlayerType*)malloc(sizeof(PlayerType)); // should be typecasted and wrong sizeof argument
if(plyr != NULL){
plyr->number = number;
plyr->name = name;
plyr->weight = weight;
plyr->height = height;
}
return plyr;
}
您应该学习更多,并尝试理解指针和结构,以更好地使用C
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。