2010-09-24 51 views
2

簡單說,就是相當於如果參數非常複雜,那麼*和&操作符會如何操作?

&(someObject->someAttribute.someMember); 

&someObject->someAttribute.someMember; 

(&someObject)->someAttribute.someMember; 

(&(someObject->someAttribute)).someMember; 

還是應該真正把明確括號有菊st安全嗎?

+2

在這裏看到:http://www.cppreference.com/wiki/operator_precedence – 2010-09-24 14:42:21

回答

10

它等效於:

&((someObject->someAttribute).someMember) 

->.和具有相同的優先級,並且左結合。一元 - &具有較低的優先級。

如果你有非常複雜的表達式,那麼你當然應該使用括號來分組和明確你的代碼。但這並不是特別複雜,在C和C++中看到這樣的代碼是很常見的。

3

Wikipedia

向下滾動到運營商部分。圖表中較高框中的操作員在操作員處於較低的框中之前考慮。另請參閱關聯性規則。

或者你真的應該把明確的括號放在那裏才安全嗎?

這是一個偏好問題,但作爲一般規則,如果您在解決問題時遇到任何困難,那麼其他人也會這樣做。有疑問時加括號。

+0

-1,因爲你實際上並沒有回答這個問題,這是一個簡單直接的問題。這應該是一個評論,而不是一個聲譽捕撈探險隊。以馬丁·約克的評論爲例。 – 2010-09-24 15:07:42

+3

@John:對於這樣的新用戶有點苛刻。魚類教學也很重要,在某些情況下甚至更可取。 – 2010-09-24 15:27:04

+0

@Roger:你可能是對的。 @dgnorton:對不起,我已經撤消了我的d/v。 – 2010-09-24 15:49:04

0

如果你想要someMember的地址,然後&(someObject-> someAttribute.someMember)或& someObject-> someAttribute.someMember。

首先someObject-> someAttribute和第二到其構件somMember和第三是& 地址

結構XXX { INT XX; }; struct temp {int x; struct xxx ptr; };

struct temp t1 = {125,{127}}; 
    struct temp *t2 = &t1; 
    printf("%d %d",t2->x,*&t2->ptr.xx);