這種問題讓我想起前兩天接孩子放學時看見一群幼稚園的孩子在比誰更厲害,小A說他可以數到二百,小B表示不服說他可以數到五百,小C傲嬌的說他可以數到一千,就這樣:
「五千」
「一萬」
「十萬」
「百萬」
「千萬」
「一億」
「十億」
「百億」
……
直到一個孩子喊出「我可以數到無數!」
就像剛學會數數的小孩子會對越大的數碼產生未知的「膜拜」,就像我4歲的女兒經常認為一萬零一減一萬比23減15要難很多一樣,實際上他完全是在低維度下對高維度的莫名崇拜而以。
「指向指標的指標的指標的指標……」這種東西根本就還是指標,說更直白一點就還是一個整數而已。只是我們不常這樣用,初學者先學了陣列,又學了一級指標然後又學了二級指標,於是乎有些人可能會以為越多級的指標越是什麽「高深」的東西,就像小孩子們以為能數的越多越厲害一樣。實際上根本不是如此,你能理解數的越多不能代表越厲害是因為你學會了比單純的數數更高級一點的數學知識,你知道數學的復雜程度一般不在於數碼大小。同理當你掌握了更多的電腦知識後,你會知道編程的難點和重點根本不在那好多級的指標上。即使當我們需要指標來表示多層級關系時我們是放在結構體裏巢狀使用的,比如:
#include
<stdio.h>
struct
planet
{
char
name
[
256
];
struct
country
*
country
;
/* Others about a planet */
};
struct
country
{
char
name
[
256
];
struct
city
*
city
;
/* Others about a country */
};
struct
city
{
char
name
[
256
];
struct
district
*
dist
;
/* Others about a city */
};
struct
district
{
char
name
[
256
];
struct
street
*
street
;
/* Others about a district */
};
struct
street
{
char
name
[
256
];
struct
building
*
build
;
/* Others about a street */
};
struct
building
{
char
name
[
256
];
struct
family
*
family
;
/* Others about a building */
};
struct
family
{
char
name
[
128
];
char
dad
[
64
];
char
mom
[
64
];
/* Others about a family */
};
int
main
()
{
struct
family
myfamily
=
{
"myfamily"
,
"mydad"
,
"mymom"
};
struct
building
someonebuilding
=
{
"someonebuilding"
,
&
myfamily
};
struct
street
ZhongGuanCun
=
{
"zhongguancun"
,
&
someonebuilding
};
struct
district
HaiDian
=
{
"haidian"
,
&
ZhongGuanCun
};
struct
city
Beijing
=
{
"beijing"
,
&
HaiDian
};
struct
country
China
=
{
"china"
,
&
Beijing
};
struct
planet
Earth
=
{
"earth"
,
&
China
};
printf
(
"Myfamily is %s
\n
"
,
Earth
.
country
->
city
->
dist
->
street
->
build
->
family
->
name
);
return
0
;
}
這只是一個例子,實際上現實中上述每個結構都應該使用連結串列,hash表或者樹等多重結構,我這裏就省事了。
或者你還想了解一下指標和結構體的更復雜套用的例子:
讀了這些程式碼你還覺得好多級的指標是那麽值得一論的東西嗎?我這裏寫的不過是電腦科學的九牛一毛,學習任重道遠,不要在剛學會數數的時候就用極其有限的知識試圖「鉆研高深的問題」。