←↑→↓↖↙↗↘??
unicode=Geometric Shapes
? 僅僅個別字不同的時候的對比標(biāo)識
◆
? 著重強調(diào)
??◆ 1眉尸、
??◆ 2乏梁、
??◆ 3、
??
??
??
??
??
??
??
??
Miscellaneous Symbols
?
Dingbats
? 重點記憶,個人總結(jié)的點隶垮,或者知識室囊。
??
?
-
?指向二維數(shù)組元素的指針
int a[3][3]= { {1,2,3},{6,5,4},{7,8,9}};
int *p=a;
for (int i=0;i<9;i++)
{
printf("%d\n",*(p+i));
}
1
2
3
6
5
4
7
8
9
??運行分析:
??1雕崩、二維數(shù)組元素在內(nèi)存中是使用連續(xù)的一塊內(nèi)存區(qū)域進行存放的。
??2波俄、a代表二維數(shù)組起始地址晨逝。
??3、把a的起始地址放到p中
??4懦铺、因為p是int *捉貌,所以在取值的時候,是按4字節(jié)長度取,按int格式識別趁窃,這正好和數(shù)據(jù)定義類型是相同的牧挣。
??所以可以使用for循環(huán),按照一維數(shù)組的操作方式醒陆,直接全部輸出二維數(shù)組的內(nèi)容瀑构。
-
?指向包含n個元素的一維數(shù)組的指針
??關(guān)鍵格式:
??格式聲明一個int型的數(shù)組指針(這是一個指針,指向一個數(shù)組)刨摩,指向的數(shù)組大小為n個int型寺晌,總大小為n乘以4=4n Byte。
int a[3][3]= { {0,1,2},{3,4,5},{6,7,8}};
int (*p)[3]=a;
printf("a=%x\n",a);
printf("p=%x\n",p);
printf("%c",'\n');
printf("a+1=%x\n",a+1);
printf("p+1=%x\n",p+1);
a=61fed8
p=61fed8
a+1=61fee4
p+1=61fee4
??聲明一個指向int型數(shù)組的指針p澡刹,數(shù)組大小為3呻征,然后把a[ ][ ]的首地址賦值給了p。
??分別將a和p執(zhí)行加1操作罢浇。
??從結(jié)果可以看到陆赋,a和p的“步長”都是3個int,共計12Byte嚷闭。
??
??根據(jù)輸出的內(nèi)容攒岛,大致可以將a和p的關(guān)系表示如下:
??注意,圖中的各個不同的數(shù)組維度胞锰,如第1維和第2維在空間上應(yīng)該是重疊的灾锯,但是為了繪制方便和觀察方便,故使用不同的列的加以區(qū)分表示胜蛉。
??現(xiàn)在單獨來看指針p的字面含義:
int (*p)[3]
??按照定義挠进,p應(yīng)該是一個指向數(shù)組的指針,這個數(shù)組有3個int那么大誊册,具象表示應(yīng)該是:
??賦值a之后领突,應(yīng)該是:
??注意這里p指向的是0,1,2一共三行構(gòu)成的一個整體。
??對p取值一次案怯,*p:
??取值一次后君旦,*p指向了0行的int
??再對p取值一次,**p:
??取到數(shù)組元素值嘲碱。
??可見金砍,對于指向一維數(shù)組的指針,形如int (*p)[3],想要取得數(shù)據(jù)元素值麦锯,必須經(jīng)過2次*取值操作或者2次[ ]下標(biāo)操作恕稠。
-
?指向二維數(shù)組的(包含n 乘以 m個元素的)指針
??關(guān)鍵格式:
??根據(jù)格式定義,首先把[3][3]的具象意義表示出來:
??然而扶欣,這僅僅只是[3][3]具象表示意義鹅巍,不要忘了還有一個(*p),這個指針p是指向[3][3]這個整體的千扶,表示出來就是:
??后續(xù)依次進行三次*取值操作:
??使用代碼綜合驗證:
int a[10]={0,1,2,3,4,5,6,7,8,9};
int (*p)[3][3]=a;
printf("a=%x\n",a);
printf("p=%x\n",p);
??注意這里數(shù)組維數(shù)、大小和指針聲明的并不一致骆捧,這也是c指針“靈活”的地方澎羞。只要指針在接收賦值之后能夠在原數(shù)組的范圍內(nèi)進行取值,原數(shù)組的大小敛苇、維數(shù)等其實和指針并無太大關(guān)系妆绞。
a=61fed4
p=61fed4
??把a賦值給p后,具體結(jié)構(gòu)如下:
??這里數(shù)組a正好比指針p的范圍大一個int枫攀,原理上括饶,使用***(p+1)即可取到數(shù)組a的最后一個元素:
printf("***(p+1)=%x\n",***(p+1));
***(p+1)=9
??程序輸出表明所有推測符合預(yù)期。