C語言:關(guān)于二級指針之指向指針數(shù)組的指針的理解和操作

一、二級指針的概念
二級指針就是指向指針的指針,二級指針中存儲的是指針的地址。指向存儲指針空間的首地址。
二、二級指針之指向指針數(shù)組的定義
1.首先講一下什么是指針數(shù)組和數(shù)組指針:
(1)指針數(shù)組意思是存儲指針的數(shù)組,指針數(shù)組可以存儲多個指針。
(2)數(shù)組指針的意思是數(shù)組的指針,數(shù)組指針指向的是數(shù)組,包括一維數(shù)組、二維數(shù)組、n維數(shù)組,數(shù)組指針只有一個。
2.指向指針數(shù)組的指針
它也是唯一確定的,因為存儲指針數(shù)組的空間的起始地址是確定的,指向其的指針也是唯一確定的,這里要注意二級指針的類型應(yīng)與指針數(shù)組的類型相同,移動二級指針的步長取決于數(shù)據(jù)類型,假如是int類型的指針數(shù)組,那么其二級指針移動一個步長的大小為4個字節(jié),假如是char類型的數(shù)組其二級指針則移動一個步長大小為1個字節(jié)。
上述代碼定義了一個長度為3的指針數(shù)組,移動其二級指針,假如移動一個步長,令q=q+1,此時二級指針指向的是存儲指針數(shù)組第二個指針的空間的首地址。
三、使用二級指針訪問任意數(shù)組元素,并輸出字符
要訪問任意的數(shù)組元素,需要得到指向任意字符的的指針。
例如第二個字符串"fishinger"中的第七個字符’g’:
1.首先要移動二級指針q一個步長,即q+1,等價于&p[1],使其指向指針數(shù)組中第二個指針的起始地址,即指針p[1]的起始地址。
2.對q+1使用取值字符’ * ’ 得到指針數(shù)組中第二個指針,即 *(q+1),等價于p[1]
3.對指針 * (q+1)移動6個步長,即 * (q+1)+6,等價于 * (p[1]+6),其指向第七個字符’g’的起始地址(首地址),加6是因為指針指向的是內(nèi)存中的首地址,數(shù)組的內(nèi)存是連續(xù)的,所以移動6個步長就可以指向第7個符’g’的起始地址。
4.對指針 * (q+1)+6使用取值運算符*得到字符’g’。
可結(jié)合下圖理解:

代碼:
結(jié)果:
四、使用二級指針輸出任意字符串
1.輸出任意指針數(shù)組中各指針指向的內(nèi)存中存儲的字符串
前面的字符型指針數(shù)組中的指針有3個,其指向的內(nèi)存中存儲的字符串也有三個,分別是"hello",“fishinger”,“Good”,現(xiàn)在先輸出其中任意一個字符串,我們只需要移動二級指針q即可,以輸出字符串"fishinger"為例:
結(jié)果:
上述中的1換成2則輸出第三個字符串"Good",不加任和數(shù),即*q,則輸出第一個字符串"hello"。
2.輸出指針數(shù)組中各指針指向的內(nèi)存中存儲的全部字符串
有了輸出單個字符串的經(jīng)驗,輸出全部字符串就很簡單了,只需使用循環(huán)就可以輸出所有字符串,代碼如下:
結(jié)果:
寫在最后:
文章可能有不足之處,歡迎大家一起來探討交流,加深理解。
