關於陣列名和指標的乙個詭異問題?

時間 2021-06-03 06:31:17

1樓:邱昊宇

一般的誤解是,下標運算子 是屬於陣列的,然而事實上它是定義在指標上的:x[y] 的定義是指標算術 *(x + y)。

陣列 int arr[42]之所以可以做 arr[2] 是因為表示式 arr 被從 int[42] 型別隱式轉換成了指向陣列首元素的 int * 型別,即大家常說的「陣列名的退化」。

所以並不是 p1 變成了陣列名,而是指標本來就可以用 ,反而是陣列名需要先隱式轉換為指標後,才能做 的運算。

p.s. 因為 C++11 細分了值類別,繼續沿用從 C 繼承而來的這一套哲學導致了瑕疵:

通過指標中轉的話,對 xvalue 陣列取下標就會得到 lvalue 而不是 xvalue(兩者在 C++11 之前都是 lvalue)。所以從 C++14 開始, 不再是單獨定義在指標算術上了(指標 + 整數),標準中專門追加了對陣列求下標的處理(陣列 + 整數),分別定義了兩種操作的值類別。

陣列和指標的乙個問題?

是這樣的。詳情請看 http www.在進入主題前,我們先看乙個例子 include int main int ptr int a 1 printf d,d n a 1 ptr 1 return 0 列印出來的值是多少呢?結果 2,5具體分析 對指標進行加1 操作,得到的是下乙個元素的位址,而不是原...

請教乙個C語言指標陣列問題?

郭建波 陣列指標 也稱行指標 定義 int p 10 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是10,也可以說是p的步長。也就是說執行p 1時,p要跨過10個整型資料的長度。例 int p 4 該語句是定義乙個陣列指標,指向含4個元素的一維陣列。所以陣列指標也稱指...

C 指標訪問指向陣列的乙個小問題?求大神解答?

sliter不是jpg 想要解釋清楚這個事情其實是比較困難的。首先要從陣列開始說。你應該知道,形同int a這樣的陣列被稱為c風格陣列。c風格陣列在c c 中並不能稱得上是一種資料型別。a在語義上說是一種唯讀引用,而引用這種語法在c裡是不存在的 我不確定比較新的c標準有沒有加 為什麼說a 是一種語義...