#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 而利用二維陣列線性儲存的特性,可以將二維陣列當作一維指標方便的在函式之間傳遞 如 將乙個二維陣列賦值給乙個動態二維陣列,引數設定為一維指...