二維數組和二級指針關系淺析
昨天寫了關於一級指針的見解,即二級數組的用法和二級指針差不多,關於數組指針和指針數組這兩個是不同的概念,這一點我們一定要清楚;
數組指針我們可以理解為指向數組的指針,就是一個指針;
指針數組則可以理解為數組裏存的是指針,即每個儲存空間上儲存的是指針變量;這裏儲存了多個指針
一個數組可以這樣定義 char a[3];分配了3個字節的內存
二維數組可以這樣定義 char b[3][3];分配了3*3 即9個字節的內存
我們知道一維數組和一級指針的用法差不多,那麽二級指針有和二級指針有什麽關系呢?
{
char a[3][3];定義一個二維數組
//二維數組我們可以理解為它是由一維數組組成,比如這個二維數組可以看成是由三個一維數組構成,而每個一維數組裏分配了三個字節的空間
//每個一維數組都分配了一個頭地址a[0]是第一個數組的地址,a[1]是第二個a[2]是第三個,下標是從0開始的;
int i = 0;
char b[3];//定義一個一維數組
char *c;//定義一個一級指針
//我們知道可以直接將數組的頭地址直接賦給一級指針,那麽我們可不可以也將二維數組的頭地址賦給一個指針呢?於是便有了數組指針,即指向數組的指針
char *d[3];//定義一個數組指針,指針指向的空間只有3個字節,這是一個二級指針
c = b;//將指針指向一維數組
d = a;//將數組指針指向二維數組
printf("%d\n",sizeof(*d));//算出b所指向空間所分配的內存大小即3和數組指針的分配有關,如char *d[5] 則為5
//我們可以通過指針往數組裏copy數據
for(i = 0 ; i < 3 ; i++)
{
strcpy((b+i),"aa");
}
//通過指針來
for(i = 0 ; i < 3; i++)
{
printf("%s\n",(b+i));//b+i 每次會向後移動三個字節
}
//通過數組來
for(i = 0 ; i < 3; i++)
{
printf("%s\n",a[i]);//a[i] 每次會向後移動三個字節
}
}
寫到這裏我想大家應該可以明白二維數組是可以用二級指針來表示的;當然這裏我們還是不明白為什麽二維數組可以和二級指針的用法 一樣,這一點我們以後再說,總之現在我們可以了解二維數組可以像二級指針一樣使用,它們的用法是差不多的;
二維數組和二級指針關系淺析