簡體   English   中英

C指針算術效率

[英]C Pointer Arithmetic Efficiency

我已經看到了指針算術的解釋(例如Pointer Arithmetic )。 但我想知道兩者之間是否有真正的區別:
鑒於:

int* arr = (int*) malloc(sizeof(int) * 3);

是否:

&(arr[1])

和:

arr + 1

除了語法外,其他任何方面都不同。 在技​​術上是否更有效率? 是否在某些情況下首先使用指針上癮? 我看到了從Printing 1到1000的一個示例, 沒有循環或有條件 提前致謝。

&arr[1]arr + 1 (和&1[arr] !)是相同的,並且都計算相同的指針。 根據C標准§6.5.3.2

一元&運算符產生其操作數的地址。

...如果操作數是[]運算符的結果,則不會對&運算符或[]所隱含的一元*進行求值,並且結果就像刪除了&運算符並且更改了[]運算符一樣給+運算符。

因此,根據該規范, &arr[1]評估應如同寫為arr + 1

通常使用一個優先於另一個。 就個人而言,我想使用&arr[x]來表示僅指向該元素的指針,而當我要引用以x開頭的數組時使用arr + x x

不,沒有差異,甚至沒有性能差異(除非我們在談論編譯時間),因為:

  • arr[1]等效於*(arr + 1)
  • &(*(arr + 1)) ,取消引用和地址運算符均不做任何事情(C標准明確指出,在這種情況下不會發生取消引用),因此運算符彼此抵消。

因此,在解析和AST構建階段之后,兩種情況下編譯器最終最終僅以arr + 1結尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM