我對 C 中的指標索引運算子有點困惑。我將嘗試用一個例子來解釋我的問題:
int array[5] = {1,2,3,4,5};
int *p;
p = array;
p[2] ;
在第四行,我知道它增加了陣列的第二個索引。但是,當我看到索引運算子時,我會對其進行轉換。
例如,我轉換p[2] 為*(p 2) . 根據運算子優先級表,在 的陳述句中*(p 2) ,自增運算子和解參考運算子具有相同的優先級,但由于右關聯性,自增優先級。因此,它變為*(p 3)。然后,這個陳述句不能改變任何值,只是指向陣列的第三個索引。
為什么p[2] 增加陣列的第二個索引?我的觀點有什么問題?
uj5u.com熱心網友回復:
p[2] 等于(*(p 2)) ,不是*(p 2) 。您需要一組額外的括號來保持原始運算式的優先級。
正如您所指出的,沒有它們,您將得到*(p 2) 相當于*((p 2) ). 這與原始運算式具有不同的含義,因為它拆分了 the 2和 the *。[2]由于是單個原子操作,因此它們需要在同一步驟中完成。
uj5u.com熱心網友回復:
如前所述,p[2] 可以轉換為 (*(p 2)) ,因為 p[2] 是您要增加的元素。認為當增加索引時通常像 p[i ]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/412252.html
標籤:
上一篇:嘗試列印出鏈表時出現分段錯誤
