陣列與指標間的三條規則:
陣列名是指向陣列首元素的指標。
&e相當於給e公升了一階。(int a[4]=,a[0]本身是乙個值,&a[0]是乙個位址,公升階大概就是這個意思)
*e相當於給e降了一階。(降階相當於把乙個指標降為值,&a[0]是乙個位址,*(&a[0])就成為了值)
以上內容來自北京大學 c程式設計高階
一維陣列與指標
1 #include2 #include3intmain()4;
6 printf("
%p\n
",a); //陣列首元素的位址
7 printf("
%p\n
",&a[0
]);//陣列首元素的位址,a[0]為值,加&公升階
8 printf("
%p\n
",a+1
);//a為陣列首元素的位址,陣列首元素為指向int型的指標,a+1為第二個元素的位址
9 printf("
%p\n
",&a[0]+1
);//a[0]為陣列的首元素,加&公升階,再加一為第二個元素的位址
10 printf("
%p\n
",&a);//a為陣列 首元素的位址,&a公升階,為指向陣列的指標,值還是和陣列首元素的位址一樣,意義不同。
11 printf("
%p\n
",&a+1
);//&a為指向陣列的指標,陣列有4個元素,+1則一次加16個位元組,
12 printf("
%p\n
",*(&a+1
));//加*降階,為指向陣列最後乙個元素後面的位址,還是位址
13 printf("
%p\n
",*(&a));//加*降階,為指向陣列首元素的指標,值為陣列首元素的位址
14 printf("
%d\n
",**(&a+1
));//再加乙個*再次降階,為乙個垃圾值
15 printf("
%d\n
",**(&a));//為陣列首元素的值
16 printf("
%d\n
",*(&a[0
]));//同上
執行結果如上。
二維陣列與指標
乙個二維陣列int a[3][4]=,,};
在記憶體中存放的時候是按照順序存放的,關於二維陣列與指標的關係,依然可以套用上面的三條規則,這時的a還是陣列首元素的指標,只不過這個首元素是乙個一維陣列。
#include#include執行結果如下intmain()
,,};
printf(
"a=%p\n
",a);//陣列首元素的指標,和1的位址相同
printf(
"&a[0]=%p\n
",&a[0
]);//a[0]是二維陣列首元素的指標,二維陣列首元素是乙個一維陣列,加&公升階後和上面的意義一樣
printf(
"a+1=%p\n
",a+1
);//二維陣列的第二個元素的位址
printf(
"&a[0]+1=%p\n
",&a[0]+1
);//
printf(
"a[1]=%p\n
",a[1
]); printf(
"&a[1]=%p\n
",&a[1
]); printf(
"*(a+1)=%p\n
",*(a+1
));//a+1是二維陣列的第二個元素的位址,加*降階為第二個元素的首元素的位址
printf(
"*a+1=%p\n
",*a+1
);//a是二維陣列首元素的位址加*降階,為第乙個元素的首元素的位址,+1為二維陣列第乙個元素的第二個元素的位址
printf(
"&a=%p\n
",&a);//指向整個二維陣列的指標
printf(
"&a+1=%p\n
",&a+1
);//+1一次跨越48個位元組
exit(0);
}
指標與一維 二維陣列
示例程式 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 而利用二維陣列線性儲存的特性,可以將二維陣列當作一維指標方便的在函式之間傳遞 如 將乙個二維陣列賦值給乙個動態二維陣列,引數設定為一維指...
二維陣列與二維指標
一.指標與二維陣列 以martix 3 4 為例 1.二維陣列的本質 int martix 3 4 int martix 3 4 int 4 martix 3 令int 4 為type,type martix 3 為含有三個元素的陣列,每乙個元素型別為int 4 int 4 是乙個擁有4個int型別...