C指向另一个结构的指针

时间:2017-11-13 08:07:03

标签: c pointers struct embedded

我目前正在阅读一些数据包发送的源代码。对于以下伪代码,对于行" 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;
}     

2 个答案:

答案 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;
}