struct payload{
struct metadata meta;
char data_pointer[0];
};
struct payload* mypayload = (struct payload*) malloc(sizeof(struct payload) 50);
這里的 mypayload 型別是什么?地址、指標或其他
uj5u.com熱心網友回復:
malloc回傳一塊無型別的記憶體,賦值是告訴編譯器它是什么型別的。在這種情況下struct payload *,這是分配的記憶體的指標(地址),如果分配失敗,則為 NULL。
你不需要演員表(struct payload*)。
如果你想data_pointer成為一個靈活的陣列成員,那么你就不要指定大小char data_pointer[];。大小陣列0是未定義的行為。
uj5u.com熱心網友回復:
這里的型別是
mypayload什么?
mypayload是一個指標,一個指向 a 的指標struct payload。@kaylum
structC 沒有定義大小為 0的陣列成員,char data_pointer[0];盡管某些實作允許它作為靈活陣列成員(FAM) 的前體。
由于 C99 使用char data_pointer[];將最后一個成員定義為靈活陣列成員。
為了最好地分配一個靈活的陣列成員,計算 2 個大小的總和:
sizeof mypayload[0]: 物件的最大大小,但不包括 FAM 成員。這將包括 FAM 成員之前的任何填充。sizeof mypayload->data_pointer[0]:FAM 參考資料的大小乘以所需陣列元素的計數 50。提示:代碼中不需要型別。
sizeof更容易正確編碼、查看和維護以使用參考物件的大小。提示:不需要投射。
提示:檢查分配是否成功。
例子:
struct payload{
struct metadata meta;
char data_pointer[]; // No 0
};
struct payload* mypayload = malloc(
sizeof mypayload[0]
sizeof mypayload->data_pointer[0] * 50);
if (mypayload == NULL) {
; // TBD code to handle out-of-memory
}
uj5u.com熱心網友回復:
mypayload是一個指標。它是一個指向由malloc(). 并且您已將其配置為指向payload.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/463872.html
