C語言中最多可以使用幾層指針?

對這個問題的回答與“指針的層數”所指的意思有關。如果你是指“在說明一個指針時最多可以包含幾層間接引用”,答案是“至少可以有12層”。請看下例:
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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章