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