数组指针对于一/二维数组的使用

一维数组

数组指针的赋值:

数组指针指向数组,所以不能用int (*p1)[3]=a,因为数组指针本质上是个二级指针,a只是一级指针。

int a[3]={1,2,3};
int (*p)[3]=&a;//这样才行

数组指针的输出:

printf("%d",*(*p+1));//输出2

因此:

① *(*p+i) == a[ i ];

② *p+i 是指向a[ i ]的一级指针,即a[ i ]的地址;

③ *(p+1)是跳过整个a[ n ]数组的一个地址;
这个可以理解成 p 的值是一个二维数组a[ m ][[ n ]的地址,那么 * p是a[ m ][ n ]的第0行的地址,因此 *(p+1)是第1行的地址,而把一维数组看成二维数组的第0行,这样就可以理解为什么会跳过整个一维数组了。(如果还是不懂可以看下面二维数组)

二维数组

数组指针的赋值:

int a[2][3]= {{1,2,3},{4,5,6}};
int (*p)[3]=a;//因为a本身就是一个二维数组,因此不用取地址

数组指针的输出:

printf("%d\n",*(p));//这是第 0 行的地址
printf("%d\n",*(p+1));//这是第 1 行的地址
printf("%d\n",*(*(p+1)+2));//正确输出 6

因此:

① * ( *(p+i)+j) == a[ i ][ j ];
② *(p+i)是第 i 行的首地址 ;
③ p是a的地址,p+1是跳过整个二维数组的地址;
④虽然和a[ 0 ][ 0 ]的地址和第0行的地址数值相同,但是意思不同。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值