行指針與列指針_2

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

  比如組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

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