關於C語言行指針的詳細解析


   From:http://soft.chinabyte.com/database/339/12423339.shtml

  最近在百度知道里面發現很多學習初學者搞不清楚行指針的具體概念,今天在這里作下詳細的解釋分析。

  行指針,顧名思義就是指向一行的指針。那么哪里會用到行指針呢,用的最多的,那就是二維指針了,大家都知道,我們通常把二維指針看成一個行列式,但是它在內存中的排序卻是和一維指針一樣的。

  比如組a[2][3]={{1,2,3}{4,5,6}},a是整個數組的首地址,同時也指向第一行元素,即a是一個行指針,它每加1,所指地址移動二維數組的一行,a+1指向第二行元素。

  對a取*,即*a指向第一行第一個數,*(a+1)指向第二行第一個數,可見,對行指針取值就成了列指針,此時它還是個指針。它每加1,所指地址移動一個元素,*(a+1)+1指向第二行第二個元素,也可以寫成a[1]+1。

  **a(也可寫成a[0][0])就是這個二維數組第一行的第一個元素,**(a+1)(也可寫成a[1][0])就是第二行的第一個元素,*(*(a+1)+1)(也可寫成a[1][1])是第二行的第二個元素。可見,對行指針取2次*就成了某個元素的值了,而不再是地址。

  有這樣一個公式a[i][j]=*(*(a+i)+j),應該就知道為什么了吧…

  行指針還可以這樣定義int (*p)[n],此處定義的p指針,每加1,移動n個地址位(針對不同二維數組定義不同的n值)比如下面的這段:

  int main(void)

  {

  int a[2][3] = {{1,2,3},{4,5,6}};

  int (*p)[3];

  p = a;

  p++;

  printf("%d",**p);

  }

  此段代碼輸出結果為4,p是個行指針,可以直接將a這個行指針直接賦值給它,此時p也指向二維數組的起始地址,即第一行。p++就會移動3個元素,從而指向第二行。用法同二維數組名a。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM