gpt4 book ai didi

c - C中关键字struct的放置

转载 作者:行者123 更新时间:2023-12-04 06:00:07 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Understanding typedef with struct [duplicate]

(6 个回答)


3年前关闭。




我有几个与 struct 和 typedef 相关的问题,有一段代码,我标记了一些我不确定语法是否正确的地方。我使用 Eclipse 编辑器,它会在编译出现问题时向我显示。我只是不明白为什么有时需要关键字 struct 有时不需要。我在使用这个关键字时可能也有一些错误。所以请帮助我理解它。

让我们有结构

 typedef struct player
{
char *name;
int gameId;
int points;
int socketfd; //socket descriptor of player
int state;
} player_struct;

让我们有另一个结构
#define PLAYERSLEN 2
typedef struct game{
struct player_struct *players[PLAYERSLEN]; //PLACE1
//some code

} game_struct;

让我们有功能
player_struct *create_player()  //PLACE2
{
player_struct *player; //PLACE3

//alokace pameti
player = (player_struct *) malloc(sizeof(player_struct)); //PLACE4
//PLACE5

player->gameId = -1;
player->points = 0;
player->state = 0;

return player;
}

让我们有功能?其实这个定义是什么意思?
void *( player_struct *player) //PLACE6
{

//some code

}

问题引用:
PLACE1 - 这样对吗?为什么我不能只使用 player_struct *players[PLAYERSLEN]; ??

地点2 - 看起来在 player_struct 之前不需要 struct ,对吗?为什么?
PLACE3 - 好像有 结构也不需要,对吗?为什么?
地点4 - 好像有 结构也不需要,对吗?为什么?
地点 4 和地点 5 我可能应该 处理错误 那里,因为有 malloc,所以我应该把所有带有 PLACE4 的行放到如果 malloc 失败我应该放在 PLACE 5 免费(播放器) .我对吗?
地点6 什么可能意味着这个功能或它是什么?这里没有包含的括号内的代码应该删除播放器..我只是不明白写函数的语法 - 这是什么意思?
地点6 - 再次类似于前面为什么没有必要输入关键字 结构在此行的 player_struct 之前?这是正确的吗?

真的很感谢你的时间。

最佳答案

  • player_structstruct player 的 typedef .您不需要 struct在这种情况下的关键字。
  • 正确的。您创建了一个名为 player_struct 的类型定义这意味着 struct player .
  • 与 2 相同的原因。
  • 与 2 & 3 相同的原因。
  • 是的,您应该检查是否 malloc()返回 NULL。另外,不要强制转换来自 malloc() 的返回值.这样做可以隐藏#include错误。
  • 这不是有效的函数定义。你不需要struct因为typedef - 同上。

  • 如果您删除单词 typedef,您可能会发现这一切都更有意义。 , player_struct , 和 game_struct完全来自您的代码。然后,一旦您习惯了这一切的工作方式,您就可以重新引入 typedefs也许可以减少一些打字。举个简单的例子,你可以将你的第一个定义分解成它的组成部分:
    struct player
    {
    char *name;
    int gameId;
    int points;
    int socketfd; //socket descriptor of player
    int state;
    };

    typedef struct player player_struct;

    也许这会帮助你理解它?

    关于c - C中关键字struct的放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9012667/

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