[英]How does operator precedence and typecasting work here
好的,所以我在這里編寫指針的工作,並且不確定這段代碼如何工作。
typedef struct linkedlist {
void *obj;
struct linkedlist *next;
} linkedlist;
linkedlist *p;
//some code here
int *newpointer = (*(int *)(p->next)->obj); //code chunk in question
如果我需要在p-> next所指向的結構中類型轉換void指針'obj'(假設它已經存在)並將其復制到'newpointer'int指針,我是否正確?
int *newpointer = (*(int *)(p->next)->obj); //code chunk in question
如果我需要在p-> next所指向的結構中類型轉換void指針'obj'(假設它已經存在)並將其復制到'newpointer'int指針,我是否正確?
不。編譯器會告訴您的。 您也不需要所有這些括號:
int *newpointer = (int *)p->next->obj;
您正在嘗試使用轉換指針的取消引用值初始化指針newpointer
,這是一個錯誤。 海灣合作委員會說:
錯誤:從“ int”到“ int *”的無效轉換
刪除對取消引用運算符的調用:
int *newpointer = (int*) p->next->obj; // Also stripped unnecessary parentheses.
在C語言中,類型轉換運算符的優先級低於成員訪問運算符的優先級。 因此,
(int*)p->next->obj = (int*)(p->next->obj) = (int*)((p->next)->obj)
如果成員訪問運算符的優先級更高,則可以使用:
int *newpointer = (int*)(p->next->obj);
由於它們不是,因此您可以省略所有的參數並使用:
int *newpointer = (int*)p->next->obj;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.