2015-03-31 62 views
2

或兩者是否相等? ptr是一個指向結構數組的指針。(ptr + i) - > Func()和&ptr [i] .Func()

UPD:謝謝大家的迴應。對不起,我拼錯了語法。我試圖比較的是(ptr + i)->Func() vs (&ptr[i])->Func()。我很困惑&運營商,因爲它應該返回一個變量的地址。這不是導致採取這個地址的更多操作嗎?

+0

你的意思是'&ptr [i] - > Func()',對吧? – dasblinkenlight 2015-03-31 12:26:55

+0

這假設返回值是你應該採取的地址,而不是某種臨時的。 – 2015-03-31 12:30:59

+4

對我來說似乎更可能是標題中的'&是假的 – 2015-03-31 12:31:59

回答

1

您可能的意思是&ptr[i]->Func(),否則您的表達式不具有相同的功能。

根據C++標準,將指針類型的值添加到整型類型的值中會生成與原型相同類型的指針,其偏移量等於整型值。地址ptr[offset]產生相同的值,所以兩者是相同的。此外,另外的順序並不重要,因此,所有的表情下面做同樣的事情,而且應該產生相同的可執行代碼:

&ptr[i] 
(ptr+i) 
(i+ptr) 
&(i[ptr]) // <<== Don't do this! 

最後一個項目是有隻是作爲一個好奇心。不要在編程難題之外的代碼中使用這個構造。

8

(ptr + i)->Func()相當於ptr[i].Func()

由於運算符的優先級,&ptr[i].Func()相當於&(ptr[i].Func()),即它需要返回值爲Func()的地址。

+0

這是相反的:'ptr [i]'相當於'*(ptr + i)'。 – edmz 2015-03-31 12:28:02

+0

@black和'(* X).Func'等價於'X-> Func' – 2015-03-31 12:31:03

+3

@black所以它們是等價的,它是一個交換關係 – 2015-03-31 12:31:39

2

沒有區別。該標準保證ptr[i]完全等效於*(ptr+i)。前者通常比較容易閱讀。

1

我假設結構或類具有Func函數。 因此,通過地址訪問功能與訪問該字段的功能相同。 在我看來,這只是解決數學差異。 那麼?他們都是平等的。

相關問題