聲明,本章的代碼省略了頭文件和主函數,方便我寫出來
非常有趣的一點,指針數組
一維數組這麽表示:
int arr[4]={1,2,3,4};
二維數組這麽表示:
int arr[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
一維數組是線性的1,2,3,4。
而二維數組是平面的
1, 2, 3, 4
5, 6, 7, 8
9,10,11,12
而指針數組,很明確,就是由指針組成的數組。
例如:
int* arr1[3]={1,2,3};
那麽,其實這個一維指針數組中存放的就是1,2,3這三個數的地址。
arr1[0]就是1的地址,arr1[1]是2的地址,arr1[2]就是3的地址。
說白了,這就是一個存放地址的數組。
而解引用之後*arr1[0]就變回了1,*arr1[1]就變回了2,arr1[2]就變回了3。
而arr1[0]+1=arr1[1],這點看過前面的應該就知道怎麽回事了
如果想要創建一個二維指針數組,不可以這麽來:
int arr1[4]={1,2,3,4};
int arr2[4]={2,3,4,5};
int arr3[4]={3,4,5,6};
int* parr[3]={arr1,arr2,arr3};
因為我們知道,arr這個數組名,指的是數組首元素的地址,也就是說,{arr1,arr2,arr3}表示的並不是一個二維數組,而是三個地址,這三個地址分別為arr1,arr2,arr3的首元素。
但你用printf打印,打印parr[2][3]你卻能夠打印出6,可以打印出二維數組
因為parr[0]== arr1,parr[0][j]== arr1[j]
也就是說,parr[2][3]可以這麽理解,parr[2]== arr3,所以parr[2][3]== arr3[3]== 6。