通过指针访问数组

指针与指针变量的区别

  • 指针;一个变量的地址
  • 指针变量;一种变量专门存放地址
  • 指针变量的值是**(指针)**地址

一维数组

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)

后面这些确实有点难理解。

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