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