C語(yǔ)言-基礎(chǔ)教程-指向指針的指針

字號(hào):

一個(gè)指針變量可以指向整型變量、實(shí)型變量、字符類(lèi)型變量,當(dāng)然也可以指向指針類(lèi)型變量。當(dāng)這種指針變量用于指向指針類(lèi)型變量時(shí),我們稱之為指向指針的指針變量,這話可能會(huì)感到有些繞口,但你想到一個(gè)指針變量的地址就是指向該變量的指針時(shí);這種雙重指針的含義就容易理解了。下面用一些圖來(lái)描述這種雙重指針,見(jiàn)圖6-13。
    在圖中,整型變量i的地址是&i,將其傳遞給指針變量p,則p指向i;實(shí)型變量j的地址是&j,將其傳遞給指針變量p,則p指向j;字符型變量ch的地址是&ch,將其傳遞給指針變量p,則p指向ch;整型變量x的地址是&x,將其傳遞給指針變量p2,則p2指向x,p2是指針變量,同
    時(shí),將p2的地址&p2傳遞給p1,則p1指向p2。這里的p1就是我們談到的指向指針變量的指針變量,即指針的指針。
    指向指針的指針變量定義如下:
    類(lèi)型標(biāo)識(shí)符**指針變量名
    例如:float**p;
    其含義為定義一個(gè)指針變量p,它指向另一個(gè)指針變量(該指針變量又指向一個(gè)實(shí)型變量)。由于指針運(yùn)算符“*”是自右至左結(jié)合,所以上述定義相當(dāng)于:
    float*(*p);
    下面看一下指向指針變量的指針變量怎樣正確引用。
    [例6-27]用指向指針的指針變量訪問(wèn)一維和二維數(shù)組。
    #include
    #include
    main()
    {
    int a[10],b[3][4],*p1,*p2,**p3,i,j;/是*p指3向指針的指針變量*/
    for(i=0;i<10;i )
    scanf("%d",&a[i]);/*一維數(shù)組的輸入*/
    for(i=0;i<3;i )
    for(j=0;j<4;j )
    scanf("%d",&b[i][j]);/*二維數(shù)組輸入*/
    for(p1=a,p3=&p1,i=0;i<10;i )
    printf("M",*(*p3 i));/*用指向指針的指針變量輸出一維數(shù)組*/
    printf("\n");
    for(p1=a;p1-a<10;p1 )/*用指向指針的指針變量輸出一維數(shù)組*/
    {
    p3=&p1;
    printf("M",**p3);
    }