这种问题让我想起前两天接孩子放学时看见一群幼儿园的孩子在比谁更厉害,小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表或者树等多重结构,我这里就省事了。
或者你还想了解一下指针和结构体的更复杂应用的例子:
读了这些代码你还觉得好多级的指针是那么值得一论的东西吗?我这里写的不过是计算机科学的九牛一毛,学习任重道远,不要在刚学会数数的时候就用极其有限的知识试图「钻研高深的问题」。