久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      指向指針的指針

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

      程序的存儲(chǔ)示意如圖6-14所示,對(duì)一維數(shù)組a來說,若把數(shù)組的首地址即數(shù)組名賦給指針變量p1,p1就指向數(shù)組a,數(shù)組的各元素用p1表示為,*(p1+i),也可以簡(jiǎn)化為*p1+i表示。
      如果繼續(xù)作將p3=&p1,則將p1的地址傳遞給指針變量p3,*p3就是p1。用p3來表示一維數(shù)組的各元素,只需要將用p1表示的數(shù)組元素*(p1+i)中的p1換成*p3即可,表示為*(*p3+i)。
      指向指針的指針
      同樣,對(duì)二維數(shù)組b來說,b[i]表示第i行首地址,將其傳遞給指針變量p2,使其指向該行。
      該行的元素用p2表示為*(p2+i)。若作p3=&p2,則表示p3指向p2,用p3表示的二維數(shù)組第i行元素為:*(*p3+i)。這與程序中的表示完全相同。
      運(yùn)行程序:
      指向指針的指針
      [例6-28]利用指向指針的指針變量對(duì)二維字符數(shù)組的訪問。
      #include<stdio.h>
      #include<stdlib.h>
      main()
      {
      int i;
      staticcharc[][16]={“clanguage”,”fox”,”computer”,”homepage”};
      /*二維字符數(shù)組*/
      static char *cp[]={c[0],c[1],c[2],c[3]};指/*針數(shù)組*/
      static char **cpp;/*指向字符指針的指針變量*/
      cpp=cp;/*將指針數(shù)組的首地址傳遞給指向字符指針的指針變量*/
      for(i=0;i<4;i++)/*按行輸出字符串*/
      printf(“%sn”,*cpp++);
      printf(“———–n”);
      for(i=0;i<4;i++)/*按行輸出字符串*/
      {
      cpp=&cp[i];
      printf(“%sn”,*cpp);
      }
      }
      指向指針的指針
      程序中需要注意的是,執(zhí)行cpp=cp是將指針數(shù)組的首地址傳遞給雙重指針,所以*(cpp+i)表示第i行的首地址,而不是cpp+i。在程序設(shè)計(jì)時(shí)一定分清。

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)