C、 指针-用于使用结构数组初始化嵌套结构的函数(为详细和清晰起见进行了编辑)
学习C,我对指针和初始化结构感到非常困惑 我有struct PlayerType和struct TeamType,在头文件中声明了一个init函数。此文件看起来像:C、 指针-用于使用结构数组初始化嵌套结构的函数(为详细和清晰起见进行了编辑),c,pointers,struct,memory-management,initializer,C,Pointers,Struct,Memory Management,Initializer,学习C,我对指针和初始化结构感到非常困惑 我有struct PlayerType和struct TeamType,在头文件中声明了一个init函数。此文件看起来像: typedef struct { int number; int heaight; //inches int weight; //pounds char *name; } PlayerType; typedef struct { char *name; PlayerTy
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, int, char*);
TeamType* initializeTeam(char*, PlayerType*);
我想在init.c文件中编写函数来初始化不同的团队和玩家,但是我不知道它如何与指针等一起工作。假设我有一个函数,我想用动态分配的内存初始化一个播放器,它将返回一个播放器(用whoami的补丁编辑,谢谢!):
(编辑:代码运行得很好,没有编译其他文件-就像我说的,对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;
}
这一切都很好,很好用。我搞不懂的是如何使initializetam函数与播放器数组配合使用。我的直觉是:
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的玩家结构数组,并将其存储在团队结构的玩家属性中。在编译时,这给了我数组类型表达式的赋值,但我不知道在我的代码中的任何地方,播放器都没有定义为数组,这是我的想法
我想使用该函数初始化团队结构,然后执行以下操作:
team->players[0] = plyr1;
team->players[1] = plyr2;
team->players[2] = plyr3;
....
提前谢谢,希望这次我的问题提对了。我在您的代码中看到了一些错误
忘了包括
需要使用malloc和free函数
结构定义中的打字错误
initializePlayer函数中的声明错误
initializePlayer函数返回指针而不是结构
使用malloc分配内存时sizeof类型错误,sizeof(*plyr)是错误的
这里是固定代码
#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, 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;
}
#包括
#include//include stdlib for malloc函数
类型定义结构{
整数;
int height;//英寸、排印高度或高度
int-weight;//磅
字符*名称;
}播放类型;
类型定义结构{
字符*名称;
PlayerType播放器[12];
}团队类型;
PlayerType*初始化图层(int,int,int,char*);//固定字符到字符*
int main(){
PlayerType*plyr1=初始化图层(13,75,190,“Bob Smith”);
printf(“超级明星%s,体重%d磅,身高%d英寸,穿着编号%d”,plyr1->姓名,plyr1->体重,plyr1->身高,plyr1->编号);
免费(plyr1);
返回0;
}
PlayerType*初始化图层(整数、整数高度、整数重量、字符*名称){
PlayerType*plyr=(PlayerType*)malloc(sizeof(PlayerType));//应进行类型转换,且sizeof参数错误
如果(plyr!=NULL){
plyr->编号=编号;
plyr->name=名称;
plyr->重量=重量;
plyr->高度=高度;
}
返回plyr;
}
您应该了解更多信息,并尝试理解指针和结构,以便更好地使用C在第二个typedef之后缺少一个分号。编译器在10us中找到它。我花了1s的时间。您的代码并没有那么糟糕,但您所展示的内容似乎不足以解释冲突的警告类型。这就是为什么我们通常希望像这样的调试问题包含。但是,我可以说您在initializePlayer()
中似乎有一个错误。如果你说if(myProd!=NULL)
,你可能是指if(plyr!=NULL)
。
#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, 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;
}