如何访问另一个结构中的结构变量?
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
希望对您有所帮助 :) :) 编码愉快 :) :)
头文件中有两个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
希望对您有所帮助 :) :) 编码愉快 :) :)