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...