我目前正在阅读一些数据包发送的源代码。对于以下伪代码,对于行" packet-> packet2 =(char *)data",它实际上是什么意思?我可以理解为将变量数据中的字符数据类型存储到packet2中,它也被定义为字符数据类型吗?
struct Node1
{
char packet1;
int num1;
}
struct Node2
{
char *packet2;
int num2;
}
int main(void)
{
struct Node1 *data;
struct Node1 var1;
struct Node2 *packet;
struct node2 var2;
data = &var1;
packet = &var2;
packet->packet2 = (char*) data;
}
答案 0 :(得分:0)
packet2是char类型,你不能将指针放在结构的这个字段中.Char变量不能保存指针。你必须将packet2从char类型更改为char *类型。 这意味着您可以单独使用每个字节,因为取消引用char poiner会为您提供一个字节。
packet2[0]
将允许您访问var1结构的第一个字节。 重要的是要注意,当你做这些事情时你必须非常小心,因为可能有填充字节。对于这种情况你可以使用宏offsetof。
packet->packet2[0] = 5;
将等同于
var1.packet1 = 5;
答案 1 :(得分:0)
struct Node1
{
Node2*/or Node1*.... packet1;
int num1;
}
struct Node2
{
Node1* packet2;
int num2;
}
int main(void)
{
struct Node1 *data;
struct Node1 var1;
struct Node2 *packet;
struct Node2 var2;
data = &var1;
packet = &var2;
packet->packet2 = data;
}