我對 C 非常陌生(我正在嘗試專門在 C89 中撰寫代碼),并且我正在嘗試更好地理解 void 指標和結構的作業原理。我搞砸了,并且能夠從一個普通的 void 指標變數訪問結構內的變數。但是當我把那個 void 指標變數放在一個結構中時,我得到了一個錯誤。
我在網上發現的唯一類似問題是人們從 void 指標訪問結構,而不是從結構本身內部的 void 指標訪問結構。
當我運行此代碼時,出現錯誤;“錯誤:'('令牌之前的預期識別符號” 錯誤訊息的影像
任何幫助將不勝感激!
struct box
{
int val;
};
struct Node
{
void * data;
};
int main()
{
struct Node * node;
node = (struct Node *)malloc(sizeof(struct Node));
node->data = (struct box *)malloc(sizeof(struct box));
(*node).(*(struct box *)data).val = 5;
printf("val: %d \n", (*node).(*(struct box *)data).val);
free(node->data);
free(node;)
return 0;
}
uj5u.com熱心網友回復:
運算子的右運算元.不能是一些通用運算式。它必須是正在訪問的聯合或結構的成員名稱。
之后(*node).,您可以寫入data訪問data成員的值。然后(*node).data是您可以進一步操作的運算式。您可以使用 將該運算式轉換為struct box *并取消參考它* (struct box *) (*node).data,然后您可以使用 訪問該val結構的成員(* (struct box *) (*node).data).val。
當然,->運算子允許您用更簡單的給定替換*和的組合。.->((struct box *) node->data)->val
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/516827.html
標籤:C指针结构空指针
上一篇:這個語法是什么“成功|=MAX35101_Read_2WordValue(TOF_DIFF_AVG_REG,&TOF_DIFF_Results->TOF_DiffData);”意思是?用C/C
下一篇:指標的合適算術型別是什么?
