c语言数组字节偏移,c语言二维数组的下标运算与指针偏移

首先,定义一个二维数组int Array[y][x];

一、 对于二维数组的指针偏移的运算法则。同一维数组一样,二维数组的数组名也是指向第一个数组元素的(即Array等于&Array[0][0]),且二维数组的数组元素在计算机内的内存存放也是连续的,但不一样的是:Array+1的值不是&Array[0][1],而是&Array[1][0](即,对于二维数组Array[][x],指针Array+1中的1表示的字节数是sizeof(int)*x,而不是sizeof(int),若要表示Array[i][l]的地址,应该是 *(Array+i)+l,要复引用a[i][l],则应该是*(*(Array+i)+l)。

但是注意,同一、二维数组名一样,虽然Array+1的值等于第二行第一个元素的地址,但是使用指针运算符引用  *(Array+1)得到值依然只是一个地址。

二、指向二维数组的指针。

如果建立一个这样的指针  int *ptr=Array  ,则对ptr的指针和下标运算和指向一维数组一样。对于Array这个二行三列的二维数组来说,ptr[i*x+l]表示的是第i行第l列的元素,因为二维数组的元素在内存中实际上也是线性存放的,所以ptr[i*x+l]访问到的第i*x+l个元素就是第i行第l列的元素(虽然编译器会报错)。另外对于这个指针不能采用ptr[i][l]的双下标运算,即使它指向一个二维数组。

如果建立一个这样的指针  int(*ptr)[3]=Array  (表示建立一个指向有三列的二维数组的指针),则可以采用双下标运算ptr[i][l],或者*(*(ptr+i)+l),这都等效于Array[i][l]。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值