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

时间:2015-07-10 15:12:32

标签: c pointers struct member-variables

我在头文件中有两个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

3 个答案:

答案 0 :(得分:2)

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

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

所以,让我们举例说明你的情况。

Struct Client * packet_client;

所以,在你的情况下' - >'用来。你已经创建了playerFallStruct的静态对象。那么,'。' operator用于访问PlayerFallStruct内的成员。

packet_client->PlayerFall.fallLevel = 0

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

答案 1 :(得分:1)

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

这样的东西
 (packetClient->playerFall).fallLevel = 0;

答案 2 :(得分:0)

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

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

请注意,这是因为您未在PlayerFallStruct playerFall结构中添加指向Client的指针 - 您实际上是在声明整个结构。如果您使用指向struct Client

的指针定义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;