指標與一維陣列,二維陣列的位址問題

2021-10-04 16:20:05 字數 1258 閱讀 2199

#include void main()

對於一維陣列的位址+1,值+1的問題

#include void main()

輸出結果: 6356716  6356720  2  6356720

可以看出對位址+1是+4,是因為int型別佔四個位元組,加乙個int的位址,相當於加了四個位元組的位址。

對於二維陣列的位址+1問題

#include void main()

輸出結果:6356704    6356712      6356708          2              6356712

a                 a+1             a[0]+1       a[0][0]+1       &a[0][1]+1

a+1:a[2][2]兩行兩列,a+1相當於加2個int位址,加上8個位元組

a[0]+1:它和一維陣列一樣,加乙個int位址,加4個位元組

&[0][1]+1:和a[0]+1一樣

這裡就只說指標和陣列等價問題( '='在這裡有的是代表賦值,有的是等價,有&的是把位址值賦給指標,沒&的相當於等價,這裡的有沒有&不是字面上的,而是意義上的)(從指標的角度看,沒*的就是賦值,有*的就是等價)

對於普通變數:*p=a,p=&a[0],*&a[0]=a

對於陣列(一維陣列):*p=a[0],p=a

(二維陣列):*p=a[0][0],p=a,p=a[0] (注意一點,這裡與一維陣列不同,a+1不等價於a[0]+1,p+1等價於a+1,p+1                                          不等價於a[0]+1) 

我這裡的說等價是別有深意的。我認為的話,p相當於就是乙個普通變數並只儲存其他變數的位址,*p就是通過儲存在p上位址來找到其他變數,並放回其他變數的值。

指標對於表示二維陣列有兩種寫法(對定義指標的和陣列就直接跳過)

a[0][1]的兩種寫法:p[0]+1 和 *p+1

p[0]+1: 這個算是專門為指標出的一種寫法,它改變的是p的值

*p+1: 這個相當於是拿a的值過來,然後+1。p=a,*p=a ???? 是因為a的位址是位址,a的值也是位址。

一維陣列,二維陣列與指標

陣列與指標間的三條規則 陣列名是指向陣列首元素的指標。e相當於給e公升了一階。int a 4 a 0 本身是乙個值,a 0 是乙個位址,公升階大概就是這個意思 e相當於給e降了一階。降階相當於把乙個指標降為值,a 0 是乙個位址,a 0 就成為了值 以上內容來自北京大學 c程式設計高階 一維陣列與指...

指標與一維 二維陣列

示例程式 includevoid main int i,j 用陣列名做指標輸出資料 第一種方式 printf s n m 第二種方式 for i 0 m i 0 i printf c m i 注意點1 printf n 通過定義指標型變數輸出 char p m 將陣列首位址賦給指標變數p 第一種方式...

二維陣列與二維指標

1.二維陣列的儲存是線性的,可以通過一維指標的方式訪問。如一下 int map 5 5 int mapd map 0 0 則 map i j mapd i 5 j 而利用二維陣列線性儲存的特性,可以將二維陣列當作一維指標方便的在函式之間傳遞 如 將乙個二維陣列賦值給乙個動態二維陣列,引數設定為一維指...