一道小題:指向二維數組的指標…我的一點理解(int w[2][3],(*pw)[3];pw=w; 則下列錯誤的是 a.*(w[0]+2) b.*(pw+1)[2] c..pw[0][

來源:互聯網
上載者:User

int w[2][3],(*pw)[3];pw=w;
則下列錯誤的是
a.*(w[0]+2)
b.*(pw+1)[2] 
c..pw[0][0]
d.*(pw[1]+2)

今天晚上因為這道小題仔細研究了C的多維陣列和指向多維陣列的指標(歸根結底,這兩個東西完全一致)
上面的題是二維的,當你理解了這個題之後,多維的自然就通了。。。
要解決這類的問題,需要深刻理解“*,&,[]”這三個符號在對多維陣列操作時的作用,下面就講一下他們

在多維陣列中的作用。
(1)*:得到對應指標中的儲存的“東西”(一維的時候,這個東西是最體的值;二維時,這個東西就是指向一維數組的一個指標,三維時。。。多維時。。。)。
(2)&: 得到相應變數的地址。
(3)[]:表示相對於當前指標的位移量。這一句對理解題意非常關鍵。比如:
     例1:對int a[5],則a[3]表示相對於a位移3個位置:
        即:a[3] = *(a+3)

     例2:對int a[5][4],則a[3][2]表示相對a[3]位移2個位置,而a[3]表示相對於a位移3個位置:
       即:a[3][2]=       *(a[3]+2)  =          *(*(a+3)+2)

      例3:對int a[5][4][3],則a[3][2][1]表示相對a[3][2]位移1個位置,a[3][2]相對a[3]位移2個位置,而a[3]表示相對於a位移3個位置:
       即:a[3][2][1]=     *(a[3][2]+1)    =      *(*(a[3]+2)+1)   =         *(*(*(a+3)+2)+1) 

     對於更多維的以此類推:。。。。

     這裡面是用數組名即指標常量。對於一個指標變數的情況相同,如:
       對int a[5],*p,p=a; 則a[3]=p[3]=*(p+3);
       對int a[5][4],(*p)[4],p=a; 則a[3][2]=p[3][2]=*(p[3]+2)=*(*(p+3)+2);

       注意:上面得到的最終的結果的最終形式是類似:*(*(p+3)+2),這個式子最內部的括弧中的維度最高,而在展開內部括弧時,位移量需要乘上維度權值(即每一維中儲存的元素的個數)例如:
                    
      對於int a[5][4],(*p)[4],p=a; 則a[3][2]=p[3][2]=*(p[3]+2)=*(*(p+3)+2)=>*(*(p)+3×4+2)=*(*p+3×4+2)       //p為指向二維數組的指標,*p為指向一維的指標。需要深刻理解這一點。。。 

對於上面的題來說,還有個知識點:就是[]的優先順序高於*,因此
對於B選項:*(pw+1)[2] 等價於:*((pw+1)[2]) 按照例1的作法 =>*(*(pw+1+2)) 即:*(*(pw+3))=*(*(pw+3)+0)=*(pw[3]+0)=pw[3][0]=w[3][0](已經越界).
注意:對於a[n]代表取出(a+n)位置的值,即a[n]=*(a+n) 。所以本題:(pw+1)[2]=*(pw+1+2)

其他的選項均可參照上面的對[]的講解,並結合*,& 靈活轉換,確定是否越界:
對於a.  *(w[0]+2) = w[0][2]   參照例2(即:"a[3][2]= *(a[3]+2)" )逆運算
    c.  pw[0][0]=w[0][0]
    d.  *(pw[1]+2)   同選項a作法一樣(因為pw與w實質是一樣的,不同的是,w是一個指向一維數組的指標常量,而pw是指向一維數組的指標變數。說白了,就是w不能改變,而pw可變僅此而已)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.