C語言學習趣事 關於指標轉換

2021-09-08 20:48:22 字數 1447 閱讀 5132

c語言學習趣事_關於指標轉換 - volcanol -

c語言學習趣事_關於指標轉換

今天在gmail的群組討論貼中看到這樣乙個帖子:

[learn-linux-c-cpp] 一維陣列轉成指向陣列的指標

收件箱x

zhangzhe [email protected]

11-10-28

傳送至 learning-linux.

**:#include

int main(void

);

int (*p)[2] = (int (*)[2

])a;

printf(

"%d\n

", **p);

printf(

"%d\n

", **(p+1

)); printf(

"%d\n

", *a);

return0;

}a只是乙個指標,為何轉成int (*)[2

]之後轉成了二維指標?

事實上下面**也可以編譯執行通過。

#include

int main(void

);

int (*p)[2] = (int (*)[2])&a;

printf(

"%d\n

", **p);

printf(

"%d\n

", **(p+1

)); printf(

"%d\n

", *a);

return0;

}難倒

int (*p)[2] = (int (*)[2])a; 和 int (*p)[2] = (int (*)[2])&a;兩種轉換是等價的嗎。

這裡明顯可以看到這位網友對概念的混淆,如下的描述。

a只是乙個指標,為何轉成int (*)[2]之後轉成了二維指標?
我們知道在c語言中,陣列名是乙個常量,就是常說的const量,經過上面的變化,a並沒有變成int (*)[2]這樣的指標型別,它還是保持

原來的屬性;只不過是p是int (*)[2]這樣的乙個指標型別,並且被使用者強制指向了a這個位址。這就是說如果用指標p訪問的話,那麼可以將a位址開始的

10個整數解釋成二維陣列。

還有就是下面的這個描述:

難倒 int (*p)[2] = (int (*)[2])a; 和 int (*p)[2] = (int (*)[2])&a;兩種轉換是等價的嗎。
上面的這兩個描述是一致的, 因為在解析的時候: a 和 &a 的實質是一樣的,都是指向記憶體中固定的區域;因此兩種轉換是等價的。

這裡不多說了,歡迎園子裡的大俠們,對這個問題進行討論。

以上只是我個人的觀點,如有不當,請大家拍磚.........................

C語言學習指標

恢復內容開始 一.運算子 scanf d i 裡的 獲得變數的位址,它的運算元必須是變數 int i printf x i 位址的 大小是否與int相同取決於編譯器 int i printf p i 不能對沒有位址的取位址 a b a a 二.指標初識 就是儲存位址的變數 int i int p i...

C語言學習趣事 23 經典命題 1

最近看了一本書,書上描述了各種比較有意思的著名命題 想想為了提高自己c語言的實踐水平,決定對立面的命題進行實踐。下面描述的乙個問題是 平台問題。最長平台問題 存在已排序陣列,陣列中的乙個平台就是連續的一串 值相同的元素,並且這一串元素不能再延伸。例如 1,2,2,3,3,3,4,5,5,6 中有平台...

C語言學習筆記 指標

若觸過組合語言,那麼理解學習c語言中指標就很簡單了。指標,在彙編裡面的表現形式,無非就是定址,直接定址和間接定址。先來學習下,c語言中的4大類資料型別 基本型別 int,long,float,char 構造型別 陣列,結構體 struct,聯合體 union,列舉型別 enum 指標型別 int l...