簡體   English   中英

指向struct的指針是否可以直接給struct的成員賦值?

[英]Whether a pointer to struct can directly assign value to struct's members?

//我教科書上的這個代碼塊是否有誤? //我試過但運行失敗,終端顯示分段錯誤。

typedef struct{
    _I num;
    _u32 p[];
}_BUF;
_BUF create_buf(_I size){
    void *p = malloc(size + sizeof(_BUF)));
    _BUF *pbuf;  // a pointer to _BUF 
    pbuf->p = p; // pbuf->p directly points allocated memory. 
    pbuf->num = size;
    return pbuf;
}

_BUF類型的靈活數組成員p不是指針。 該數組始終緊跟在num成員之后(中間可能有固定數量的填充)。 無法分配給數組 object; 您不能使該數組在其他地方引用 memory。

malloc(size + sizeof(_BUF))同時為兩者分配 memory。 所以這個 function 的正確實現就是

typedef struct{
    _I num;
    _u32 p[];
}_BUF;

_BUF *create_buf(_I size){
    _BUF *pbuf = malloc(size + sizeof(_BUF)));
    pbuf->num = size;
    return pbuf;
}

不需要中介void * 即使malloc返回void * ,您可以而且應該將返回值直接轉換為您實際需要的類型,並且不需要轉換。

而且,正如 Craig Estey 指出的那樣,按值返回_BUF在這里沒有任何意義; 它需要是一個指針。 希望那只是一個錯字。

如果你在問題中輸入的代碼真的是從你的教科書中正確復制的,那么你的教科書就是在胡說八道,你可能應該得到更好的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM