如何用指針數(shù)組和數(shù)組指針來(lái)表示二維數(shù)組?
今天來(lái)給大家分享一道經(jīng)典的筆試題。 ?
a是一個(gè)二維數(shù)組,3 行 4 列,一共 12 個(gè)元素。
p是個(gè)數(shù)組,數(shù)組里面元素個(gè)數(shù)不詳,每個(gè)元素都是整型指針。
那么它應(yīng)該如何初始化?
首先,既然是數(shù)組,初始化一定需要一個(gè)大括號(hào),然后里面填上多個(gè)整型指針。
int*p[]={};那在二維數(shù)組中,能不能找到int *類型的數(shù)據(jù)?
肯定是有的。
在二維數(shù)組中,無(wú)非有這么幾種寫法:
a; a[0]; a[0][0]; &a; &a[0]; &a[0][0];數(shù)組名肯定不對(duì),它是一個(gè)二級(jí)地址;
&a更不對(duì),它是三級(jí)地址;
a[0][0]是個(gè)具體的元素,跟地址沒(méi)有關(guān)系。

剩下的就是a[0]和&a[0][0]。
其實(shí)這兩個(gè)的含義一樣,都表示第一行第一個(gè)元素的地址,既然是元素的地址,那肯定就是int *類型。
于是p的初始化就可以寫成:
int*p[] = {a[0], a[1], a[2]};分別是第一行、第二行、第三行首元素的地址。
而p后面的中括號(hào)也可以寫上3,表示數(shù)組有3個(gè)元素。
int *p[3] = {a[0], a[1], a[2]};內(nèi)存模型畫出來(lái)就是這樣的,數(shù)組p包含三個(gè)指針,每個(gè)指針都指針二維數(shù)組每行的第一個(gè)元素。

再來(lái)看q。

q是個(gè)指針,指向數(shù)組,而且是個(gè)一維數(shù)組,因?yàn)橹挥幸粋€(gè)中括號(hào),但是數(shù)組有幾個(gè)元素不詳,每個(gè)元素都是整數(shù)。
那數(shù)組a中有沒(méi)有一維數(shù)組數(shù)組呢?
當(dāng)然有的,我們剛接觸二維數(shù)組的時(shí)候,老師就跟我們說(shuō)過(guò),二維數(shù)組就是由多個(gè)一維數(shù)組組成,第一行是個(gè)一維數(shù)組,第二行也是一個(gè)一維數(shù)組。

那我們只要把第一行的地址賦值給q就行。
于是可以把q初始化成:
int(*q)[] = a;a表示數(shù)組第一行的地址,所以q后面的中括號(hào)也能順理成章的寫成4,因?yàn)橐痪S數(shù)組有4個(gè)元素。
int (*q)[4] = a;q的含義和a是一樣的,表示數(shù)組第一行的地址,q加一,就指向數(shù)組的下一行。

這個(gè)就是C語(yǔ)言里面的指針數(shù)組和數(shù)組指針,怎么樣,迷糊了沒(méi)?
審核編輯:劉清
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7630瀏覽量
140655
原文標(biāo)題:分別用指針數(shù)組和數(shù)組指針表示二維數(shù)組
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
C語(yǔ)言指針和數(shù)組的錯(cuò)誤用法
C語(yǔ)言中指針數(shù)組和數(shù)組指針的區(qū)別
問(wèn)一個(gè)二維數(shù)組和指針的問(wèn)題?
C語(yǔ)言入門教學(xué)之數(shù)組資料總結(jié)免費(fèi)下載

C語(yǔ)言程序設(shè)計(jì)教程之二維數(shù)組如何應(yīng)用二維數(shù)組的資料概述
二維數(shù)組的指針指向錯(cuò)誤應(yīng)該如何糾正

C語(yǔ)言指針和數(shù)組的區(qū)別
三維數(shù)組如何用下標(biāo)表示指針

評(píng)論