指標和陣列有的書上說 完全相同,有的卻說完全不相同。
那到底哪乙個說的對呢? 下面我們來對比一下
char str [10] =;//定義乙個陣列裡面有
10個元素
char *pstr = str; //把陣列
首元素的位址賦給指標 -----1
char *pstr = &str; //把陣列
首位址賦給指標 -----2 1和
2的區別
1是取得陣列首元素的位址
2是取得陣列的首位址
結果一樣,但是含義不一樣,在不執行加法操作之前看不出區別,但如果執行加法操作
1的 pstr++
相當於
str[1];
2的 pstr++
相當於
str[10];
直接加乙個陣列的長度,而不是加到下乙個元素
str[10] 已經越界了
再來看下乙個
char *pstr = str; /把陣列
首元素的位址賦給指標 -----3
char *pstr = &str[0]; /把陣列
首元素的位址賦給指標 -----4 3和
4等價3是取得陣列首元素的位址
4也是取得陣列首元素的位址
char *pstr = &str[0]; -----5
char *pstr = &str; -----65和6
的區別 同理1和
2 有了以上知識儲備之後 我們就會知道
執行完這一句char *pstr = str; 之後
str[1] ; 就會
等價於 *(str+1);
等價於
*(&str[0]+1);
等價於 *(pstr+1);
等價於
pstr[1] ;
都是跳轉到 陣列的第二個元素,從這個角度來理解 陣列和指標等價
但是和它卻不同
str [1](加到下乙個元素) ≠
*(&str+1)
(直接加乙個陣列的長度)
因為 &str
代表乙個陣列的位址
str
和 &str[0]
代表陣列首元素的位址
那麼指標和陣列到底相同還是不相同呢?
論陣列與指標 03 陣列指標 步長
這裡a是個二維陣列的陣列名,相當於乙個二級指標常量 二維陣列名與二級指標毫無關係 初學者常常混淆 p是乙個指標變數,它指向包含5個int元素的一維陣列,此時p的增量以它所指向的一維陣列長度為單位 p i 是一維陣列a i 0 的位址 p 2 3表示a 2 3 位址 第一行為0行,第一列為0列 p 2...
指標與陣列,指標陣列 陣列指標
int a 10 print n a p,a p a,a print n a 1 p,a 1 p a 1,a 1 a做乙個指標,步長為4,指向乙個元素,a做乙個指標,步長為40,指向乙個維陣列 int b 3 4 print n b p,b p,b p b,b,b print n b 1 p,b 1...
指標陣列與陣列指標
1.指標陣列 指標陣列中每乙個元素都是乙個指標,也既是存放字串的首位址。所以指標陣列適合處理若干個長度不等的字串。定義的一般形式為 型別說明符 指標陣列名 陣列長度 例如 int p 3 宣告乙個陣列,指標陣列p,由3個int型別指標變數元素組成 從運算子的優先順序分析,由於 的優先順序大於 所以p...