如何访问另一个结构中的结构变量?

How to access a structure variable inside another structure?

头文件中有两个typedef struct

typedef struct {
    int fallLevel;
    unsigned long lastStepTime; 
} PlayerFallStruct;

typedef struct {
    int id;
    char* name;
    int x;
    int y;
    PlayerFallStruct playerFall;

} Client;

我不知道如何访问 PlayerFallStruct playerFall。如果我使用 ((PlayerFallStruct*) packetClient->playerFall)->fallLevel = 0;

编译器抛出错误:

Client.c:46:4: error: cannot convert to a pointer type ((PlayerFallStruct*) packetClient->playerFall)->fallLevel = 0;

为什么?哪里出了问题?我怎样才能访问我的 stuct

在您的 Client 类型变量(此处为 packetClient)中,playerFall 成员变量不是指针。您可以尝试使用普通成员引用运算符 dot (.).

访问它

类似

 (packetClient->playerFall).fallLevel = 0;

要回答您的问题,您应该能够像这样访问 PlayerFallStruct playerFall

struct Client packetClient, *packetClientPtr = &packetClient;
//Fill client...
(packetClient->playerFall).playerFall = 0;

请注意,这是因为您没有在 Client 结构中包含指向 PlayerFallStruct playerFall 的指针 - 您实际上是在声明整个结构。如果您使用指向 PlayerFallStruct:

的指针定义 struct Client,您的语法将起作用
typedef struct {
    int id;
    char* name;
    int x;
    int y;
    PlayerFallStruct *playerFall; //Note - this is a pointer!

} Client;

这也需要在此结构之外创建一个 PlayerFallStruct(通常,我认为这是将结构置于结构中的首选方法,但归根结底都是语义):

PlayerFallStruct playerStruct, *playerStructPtr = &playerStruct;
packetClient->playerFallStruct = playerStructPtr;

这很容易!!!!记住访问结构的规则

'.' for static object of structure
'->' for pointer type obj of structure.

所以,让我们以您的案例为例。

结构客户端 *packet_client;

因此,在您的情况下使用了“->”。您已经创建了 playerFallStruct 的静态对象。所以, '。'运算符用于访问 PlayerFallStruct 内部的成员。

packet_client->PlayerFall.fallLevel = 0

希望对您有所帮助 :) :) 编码愉快 :) :)