第41章 C語言之指針(三)指針數組(1 / 1)

聲明,本章的代碼省略了頭文件和主函數,方便我寫出來   非常有趣的一點,指針數組   一維數組這麼表示:   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。