0

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: 错误:无法转换为指针类型 ((PlayerFallStruct*) packetClient->playerFall)->fallLevel = 0;

为什么?哪里有问题?如何访问我的stuct?

4

3 回答 3

3

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

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

因此,让我们以您的情况为例。

结构客户端 *packet_client;

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

packet_client->PlayerFall.fallLevel = 0

希望有帮助:) :) 快乐编码 :) :)

于 2015-07-10T15:51:50.370 回答
1

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

就像是

 (packetClient->playerFall).fallLevel = 0;
于 2015-07-10T15:16:13.767 回答
0

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

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

请注意,这是因为您没有在结构中包含指向的指针PlayerFallStruct playerFall-Client您实际上是在声明整个结构。如果您struct Client使用指向 a 的指针定义,您的语法将起作用PlayerFallStruct

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;
于 2015-07-10T15:25:20.793 回答