這個問題在這里已經有了答案: 對于陣列,為什么a[5] == 5[a]? (19 個回答) 8 小時前關閉。
閱讀cppreference我發現了這個例子:
int a[4] = {1, 2, 3, 4};
int* p = &a[2];
std::cout << p[1] << p[-1] << 1[p] << (-1)[p] << '\n'; // 4242
1[p]我對and的含義感到困惑(-1)[p]。在其他地方尋求幫助有人告訴我:“1[ptr]相當于*(1 * sizeof(T) ptr)”。所以我機械地理解它為什么輸出4242,但我發現很難推理。因為通常將指標放在方括號中是荒謬的,并且本身就是一個錯誤:
[cling]$ 1[p]
(int) 4
[cling]$ [p]
input_line_15:2:3: error: 'p' cannot be captured because it does not have
automatic storage duration
[p]
^
這只是我應該記住的語法的一個特例,還是我誤解了陳述句背后的一些邏輯?
uj5u.com熱心網友回復:
假設p是一個指標或陣列,并且n是一個整數。當編譯器看到這個:
p[n]
它在邏輯上將該運算式解釋為:
*(p n)
所以當它看到這個時:
n[p]
編譯器將其視為:
*(n p)
這在代數上與*(p n)
因此:p[n] == n[p]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/467518.html
上一篇:使用指標和參考時出現非法指令
下一篇:將類成員存盤為原始指標的替代方法
