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