int i = 0;
int * ip0l = &d;
int ** ip02 = &ip01;
int ***ip03 = &ip02;
int **** ip04 = &dp03;
int ***** ip05 = &ip04;
int ****** ip06 = &ip05;
int ******* ip07 = &ip06;
int ******** ip08 = &ip07;
int ********* ip09 = &ip08;
int **********ip10 = &ip09;
int ***********ipll = &ip10;
int ************ ip12 = &ipll;
************ ip12 = 1; / * i = 1 * /
注意:ANSIC標準要求所有的編譯程序都必須能處理至少12層間接引用,而你所使用的編譯程序可能支持更多的層數。
如果你是指“最多可以使用多少層指針而不會使程序變得難讀”,答案是這與你的習慣有關,但顯然層數不會太多。一個包含兩層間接引用的指針(即指向指針的指針)是很常見的,但超過兩層後程序讀起來就不那麼容易了,因此,除非需要,不要使用兩層以上的指針。
如果你是指“程序運行時最多可以有幾層指針”,答案是無限層。這一點對循環鏈表來說是非常重要的,因爲循環鏈表的每一個結點都指向下一個結點,而程序能一直跟住這些指針。請看下例:
例7.2一個有無限層間接引用的循環鏈表
/ * Would run forever if you didn't limit it to MAX * /
# include <stdio. h>
struct circ_list
{
char value[ 3 ]; /* e.g.,"st" (incl '\0') */
struct circ_list * next;
};
struct circ_list suffixes[ ] = {
"th" , &.suffixes[ 1 ], / * Oth * /
"st" , &.suffixes[ 2 ], / * 1st * /
"nd" , & suffixes[ 3 ], / * 2nd * /
"rd" , & suffixes[ 4 ], / * 3rd * /
"th", &.suffixes[ 5 ], / * 4th * /
"th" , &.suffixes[ 6 ], / * 5th * /
"th" , & suffixes[ 7 ], / * 6th * /
"th" , & suffixes[ 8 ], / * 7th * /
"th", & suffixes[ 9 ], / * 8th * /
"th" , & suffixes[ 0 ], / * 9th * /
};
# define MAX 20
main()
{
int i = 0;
struct circ_list *p = suffixes;
while (i <=MAX) {
printf("%ds%\n", i, p->value);
+ +i;
p = p->next;
}
}
在上例中,結構體數組suffixes的每一個元素都包含一個表示詞尾的字符串(兩個字符加上末尾的NULL字符)和一個指向下一個元素的指針,因此它有點象一個循環鏈表;next是一個指針,它指向另一個circ_list結構體,而這個結構體中的next成員又指向另一個circ_list結構體,如此可以一直進行下去。
上例實際上相當呆板,因爲結構體數組suffixes中的元素個數是固定的,你完全可以用類似的數組去代替它,並在while循環語句中指定打印數組中的第(i%10)個元素。循環鏈表中的元素一般是可以隨意增減的,在這一點上,它比上例中的結構體數組suffixes要有趣一些。
<br />本文來自【C語言中文網】:<a href="http://see.xidian.edu.cn/cpp/html/1579.html" target="_blank">http://see.xidian.edu.cn/cpp/html/1579.html</a>