我正在使用UDP协议的实现,该协议发送像char *这样的套接字。我还定义了一个结构,以根据大小适合套接字的标头和主体。就像:
#pragma once
typedef struct WHEATHER_STRUCT{
uint8_t packetID; // 9
uint16_t packetSize; // 11
uint8_t subpacketID; // 0
uint16_t subpacketOffset; // 0
uint8_t reserved; // 0
float cloudLayerAltitude; // 25000
}
我检查了此套接字的大小,它是11个字节。
我正在提高对指针的了解,并尝试使用带偏移量的指针访问此变量。有一个例子:
结构的初始位置:&(this-> wheather_struct [0])
我试图使用此内存地址来获取变量packetID的值。但这对我不起作用。
获得此解决方案后,我将定义一个偏移量以使用此语句访问下一个值:
&(this->wheather_struct[0]) + 1 // Memory address of the next byte?
我具有该结构的第一个元素的内存地址,但无法获取其值。你能帮我吗?
如果您能给我一个使用偏移量指针访问cloudLayerAltitude值的示例,那就太棒了。谢谢。
答案 0 :(得分:1)
如果 this->wheather_struct
是WHEATHER_STRUCT
结构的数组(或指向数组第一个元素的指针),那么它将在内存中看起来像这样:< / p>
+--------------------+--------------------+--------------------+-----+ | wheather_struct[0] | wheather_struct[1] | wheather_struct[2] | ... | +--------------------+--------------------+--------------------+-----+
指向weather_struct[0]
的指针将指向该数组的第一个元素。
如果将一个添加到该指针,则将指向该数组的第二个元素。不是结构中的第二个字节。
要获取指向第二个字节的指针,您需要将指针&weather_data[0]
视为指向字节的指针。