論指標與陣列

2021-07-10 21:46:38 字數 1188 閱讀 8077

指標和陣列有的書上說 完全相同,有的卻說完全不相同。

那到底哪乙個說的對呢? 下面我們來對比一下

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