指針數組:是一個存了一堆指針元素的數組;(指針數組的首地址就是二級指針)
數組指針:(又稱爲行指針)是一個指向數組的指針;(通常數組指針指向的都是二維數組的,一維數組只須要用一個普通的指針就能夠了);(數組指針就是一種專門類型的指針);數組
若是用普通指針(即一級指針)指向二維數組時,則在經過一級指針對這個數組操做時,則要把這個二維數組認爲成一維數組,而後經過操做一維數組的形式來進一步進行操做;(但在賦值時不能直接用數組名賦值給一級指針);函數
經過指針數組來取代二維數組的方法:由於其內部是指針的一維數組,每個指針元素表示二維數組中的一行的首地址,由於其爲數組,因此不能直接所有進行賦值,只能一個指針元素來進行賦值其行的首地址;若是想要將整個指針數組做爲實參傳到一個函數中的時候的時候,其形參必需要爲二級指針的(其形式爲**p或者*p[]),由於指針數組的首地址爲二級指針;(二級指針就是表示一個指針的地址,即指向指針的指針);指針
經過數組指針來取代二維數組的方法:即這個指針表示行的位置,(相似二級指針,但不一樣,由於其內部訪問的形式不一樣,後面會講)直接這樣p=a,若是想要一開始表示的位置並不是初始位置,則要對行的那個首地址再取地址;因此在用數組指針做爲形參的時候,其實參要麼是二維數組的首地址,要麼就是這一行的首地址的地址;例*(*(a+1)+2),第一個1表示行的偏移量,第二個2表示列的偏移量,第一個‘*’表示進入行中,第二個‘*’表示具體的那個值排序
指針數組的數組名爲二級指針,即指向指針的指針;
數組指針則是先經過找行,而後再從這行找對應的列;
其內存中的區別:
數組指針中在找行的時候,是將這一行的全部內存都視爲一個總體,全部找到對應的行的首地址其其後面帶有的是列數的內存數;
指針數組中的那些指針元素中存的僅爲對應的首地址而已,(二級指針同理,僅爲一級指針的那個地址而已,指針數組的首地址就是二級指針,其表示爲這些指針元素的首地址);內存
對於關於替代進行二維數組的排序的問題:
1:用指針數組交換的時候,只是交換了指針數組中指針元素的位置,沒有改變原來的二維數組中的順序;(用指針數組交換字符串會比較快,由於只是交換了指針的位置,不用專門調用函數交換字符串)
2:用數組指針交換的時候,交換的就是其內部的元素,而指針指向的位置不變,變化的爲其內部的值;
(用哪個均可以,但兩個內部的性質是不一樣的,因此仍是要多注意!!)字符串