C语言二维数组深度理解

二维数组比较抽象,比较难理解,他的原理是则呢么样的呢与一维数组之间有什么联系呢?

定义一个二维数组
a[3][3]={
{1,2,3},
{4,5,6},
{7,8,9}.
}
我对于二维数组的理解就是

一个一维数组a[3]保存了3个地址,这三个地址分别是这二维数组的三行的首地址这样*(*(p+1)+1)与p[1][1]相同也就说的通了(p指针指向数组a)

●════════════════════════════════════════════════════●

最近几天我有思考了一下,感觉上面说的有点不妥

int a[8][8];
把a[8]看成一个一维指针数组不合适
因为 &a[0]==&a[0][0]
如果a[0]具有单独内存空间的话 &a[0]应该是!=&a[0][0]的
所以 应该说a[0]代表 a[0][0]的地址 而不是a[0]存储了 a[0][0]的地址 也就是编译器看到a[0]后将之替代为&a[0][0] 而不是将&a[0][0]存入某一块内存中, 也也就是 a[8][8]在内存中 只占了64*sizeof(int)个字节 不再多占用其他内存

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值