一直在看《c++ primer 第四版》和 《c++ 程式設計教程》 (錢能 主編)
在《c++ primer 第四版》的 4.2.4節 , 《c++ 程式設計教程》8.3節 都有講關於 指標和陣列 的知識。
我把前者稱為 a, 後者稱為 b吧。
a 的東西是比較全的, 相對於b。 不過b 的東西直擊重點, 並且例子舉的好。
1.在表示式中使用陣列名時, 該名字會自動轉換為指向陣列第乙個元素的指標(b中是第乙個元素位址, 個人覺得指標更貼切, 指標做加減法很正常嘛).
即對於陣列 ia, 有 ia 等於 &ia[0].
int ia = ;
int * iptr = ia;
2. 對於有 i 個元素的陣列 ia:
ia[i] 等價於 *(ia + i) 等價於 iptr[i] 等價於 *(iptr + i)
ia[i] 表示陣列的第 i 個元素 的值. 而 ia + i 表示第 i 個元素的指標, 用 * 做解引用操作, 即 *(ia + i) 就表示第 i 個元素的值. 另外,下標操作是針對指向陣列元素的指標而不僅僅是針對陣列名的, 所以 iptr[i] 也表示第 i 個元素的值, 如果你用 (*ia)[0] 和 (*iptr)[0] 編譯的時候都是會報錯的.
&ia[i] 等價於 ia + i 等價於 iptr + i 等價於 &iptr[i]
3. b 中提到的,陣列名是指標常量, 區別於指標變數, 所以, 給陣列名賦值是錯誤的.
如 ia++; //是錯誤的, 它相當於 ia = ia + 1. 但是如
ia + 1; // 是可以的, 但是沒意義.
對於編譯器來說,陣列名表示記憶體中分配了陣列的固定位置, 修改了這個陣列名, 就會丟失陣列空間, 所以陣列名所代表的位址不能被修改.
C 指標陣列與陣列指標
說實話,c語言真的很讓人蛋疼,它不像物件導向的語言,我們重心在設計程式上。而使用c語言,你不僅要考慮程式的設計,你還要考慮很多他的使用細節,不然一不小心你怎麼死的都不知道。但是,個人感覺,c語言的魅力是其他任何語言都比不了的!繼續看。陣列指標 範例 typedef int aint5 5 typed...
C 指標陣列與陣列指標
陣列指標 也稱行指標 陣列指標 a pointer to an array,即指向陣列的指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣...
指標陣列與陣列指標 C
關於陣列指標 1 對於二維陣列,初始化時,必須指定乙個引數 int a 3 int a 這樣是不允許的,因為要確定指標移動一步要走多遠。對於一位陣列int a 這樣可以。也就數說只有乙個引數位置可以不用設定引數。2 int p 3 必須加上小括號,這代表乙個指向陣列的指標,數字3,代表每一列有三個數...