2016-11-17 66 views
-2

我已聲明的結構「節點」具有一個成員變量的「m」,然後訪問結構限定兩個變量如下使用指針

struct node t, *p; 

在程序後來我分配的t地址p

p = &t; 

要訪問成員變量我需要使用p->m

但我想使用*算子,但是編寫它*p.m會給出錯誤。爲什麼這樣?

+3

嗯...什麼是'a'? –

+0

使用'(* p).memberVariable'。 '.'優先級爲1,'*'優先級爲3. http://en.cppreference.com/w/c/language/operator_precedence – Arkadiy

+1

請問您可以告訴我們*爲什麼要使用解引用操作符?使用它你會在每次你寫的時候再寫兩個字符,對於代碼讀者來說可能並不那麼清楚。 –

回答

9

爲此,你必須看到運營商的優先權。

運算符.的優先級高於*運算符。

寫它像*p.m使編譯器認爲它是*(p.m)。您需要使用(*p).m

1

由於運算符優先級,*p.memberVariable將不起作用。做(*p).memberVariablep->memberVariable

2

這是因爲operator precedence

表達式*p.memberVariable等於*(p.memberVariable)。即它試圖取消p.memberVariable作爲指針,而不是p。這會給你一個編譯器錯誤,因爲p是一個指向結構的指針,你可以使用點運算符來選擇結構成員。

您需要明確告訴編譯器使用括號取消引用指針p(*p).memberVariable