二级指针和二维数组

下面看二维数组:
int a[3][4];
改写下形式,也许,你就懂了 int (a[3])[4];
a[0], a[1], a[2]    //他们都是int [4]的类型,都是4个int元素的首地址,你可以画个图
a   // 是 int [3] [4]的类型,它是a[0] , a[1], a[2] ,3个元素的首地址,画个图;

a + 1 就是&a[1] ,  a + 2 就是&a[2];
*(a + 1 ) + 2 就是 a[1] + 2, 也就是 &a[1][2],  于是 *( *(a + 1) + 2)  就是a[1][2];

现在看二维指针和数组指针,
int * * pi;        // pi = a;这里的赋值是不可以的,你懂的,类型不一样,除非你强制转换
int  (*pj)[4];   // pj = a;  这里赋值是可以的;数组指针

假设int  4个字节,指针也都是4个字节,而且 pj = pi = 0 (地址十进制)
pi + 1  //  地址是 4,偏移了一个int*的元素,
pj + 1  //  地址是 16,偏移了4 * 4个int元素,

转载于:https://www.cnblogs.com/mlj318/archive/2011/09/16/2182348.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值