通過指針訪問數組

指針與指針變量的區別

  • 指針;一個變量的地址
  • 指針變量;一種變量專門存放地址
  • 指針變量的值是**(指針)**地址

一維數組

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

學過C++的都知道一維數組的名字就是首地址;
所以可以如下表,如果int *p=a;

a==&a[0] p==&a[0]
a+1==&a[1] p+1=&a[1]

可以說a與p等效
通過指針訪問一維數組

a==&a[0] a+1==&a[1]
*a=a[0] *(a+1)===a[1]

關於以下文章我也是學習以下鏈接;
點這裏

二維數組(數組的數組)

指向元素

int a[3][4]={{1,2,34},{5,6,7,8},{9,10,11,12}};
int *p=&a[0][0];

第i行第j列實際上是第i*c+j個元素(其中c是列數)
但又不能像一維數組一樣p==a;
i*c+j個元素地址偏移量4*(i*c+j)故,a[i][j]=*(p+i*c+j)
首地址+偏移量;

訪問二維數組

a[0]==&a[0][0] a[0]+1==&a[0][1]
*a[0]==a[0][0] *(a[1]+2)==a[1][2]

指向每一行的指針

int a[3][4]={{1,2,34},{5,6,7,8},{9,10,11,12}};
int *p=a[0];

這裏不讓p==a;我們說二維數組是數組的數組;
在這裏插入圖片描述
此時p=a[0];相當於p=第0行;
如果要指向第1行int *p=a[1];
要輸出a[i][j]=*(p+j)
需要提前指定p指向某一行,且此方法必須知道行數;
指向整個數組的指針

int a[3][4]={{1,2,34},{5,6,7,8},{9,10,11,12}};
int (*p)[4]=a;

首先要知道a;無論一維數組或者二維數組,數組名a==a[0]
可以把*p看作b,b[4]=a;則*p==a[0]; *(*p)==a[0][0];[4]是四個元素
a[i][j]=*(*(p+i)+j)

後面這些確實有點難理解。

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