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;
....

预先感谢,希望这次我的问题正确提出。

解决方法

我在您的代码中看到了一些错误

  1. 忘记包含

    必须使用malloc和free函数

  2. 结构定义中的
  3. typos

  4. initializePlayer函数中的声明错误

  5. initializePlayer函数返回的指针不是结构

  6. 使用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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...