struct message {
uint8_t start;
uint16_t length;
uint8_t data[10];
uint8_t checkSum;
} __attribute__((packed));
struct message devices[10];
void request(struct message *msg) {
struct request *req = (struct request *)&msg->data;
req->operation = 1;
req->requesterAddress = MASTER_ADDRESS;
}
request(&devices[0]);
我的问题是,为什么在“& msg-> data”符号?从结构中访问数组并将其转换为指针
我的理解是,函数“请求”接收指针“msg”到一个结构。 msg-> data从msg(“data”是一个数组)指向的结构中检索指针“data”,然后将其转换为另一个指针类型(struct request *)。
所以那部分应该是(struct request *)msg-> data;那么为什么&符号(&)?
注意:转换不仅是错误的,而且转让也会调用未定义的行为(实际上是赋值后的访问)。你的代码违反了有效的类型规则。 – Olaf
*“msg-> data检索指针”data“”* - 否,它访问* array *数据。阵列在95%的使用中衰减至指针。 – StoryTeller
除了有效性之外,'&msg-> data'表示为指针类型'uint8_t(*)[10]',而'msg-> data'表示为'uint8_t *'。这并不重要,因为无论何时抛出类型,并将其转换为希望对齐的'struct request *'。 – WhozCraig