结构体和指针:请帮我理解这行代码

问题描述 投票:0回答:1

请帮我理解最后一行的作用:

int PCKT_LEN = 8192;

char buffer[PCKT_LEN];
  struct iphdr *ip = (struct iphdr *) buffer;
  struct udphdr *udp = (struct udphdr *) (buffer + sizeof(struct iphdr));

我知道这个,我有点理解:

(struct udphdr *)  -> Means cast to a udphdr "object"/instance or something like that.

这个,我有疑问/不明白:

(buffer + sizeof(struct iphdr)) 
        
        This one, I don't quite understand. Is it because it uses the ADDRESS being returned by buffer and then adds the actual size of the buffer until the last byte as an offset before starting to allocate udp memory range?  I guess the it wants to start the address of udp right after the ip ?

如果我像下面那样执行最后一行,它会是一样的吗? (我将buffer更改为ip

   struct udphdr *udp = (struct udphdr *) (ip + sizeof(struct iphdr));

谢谢你。

问候,

X

(我是 CPP 的新手,刚刚开始接触指针和结构。)

pointers struct
1个回答
0
投票

它只是说有一个内存缓冲区

buffer
,其中包含一个
iphdr
结构(
*ip
),紧接着是一个
udphdr
结构(
*udp
)。

第二行将

udp
指针设置为内存中
ip
结构末尾之后的一个字节。 (它获取基指针,然后将其前进
iphdr
结构在内存中所需的字节数)

注意,除了

buffer
内存之外,绝对不涉及任何分配。该代码只是用包含 udp 数据包的内存结构“覆盖”平面数组
buffer
。通常这样做是为了能够从平面缓冲区的明确定义的偏移量中选取字节。 (访问
udp->flags
比访问
*(buffer + offset)
更有意义)

© www.soinside.com 2019 - 2024. All rights reserved.