sizeof与数组之间那点事

        今天做题看到很多sizeof(a)、sizeof(&a)、sizeof(&a+1)之类的题,一不小心就把人弄晕了,所以今天就好好把这些整理整理。

开始之前呢分享一个小技巧——数组名只有处于以下两种情况时才代表整个数组:①数组名单独在sizeof内时。②  &数组名(如&a)


int a[ ] = {1,2,3,4};

sizeof(a) =16                  数组名单独在sizeof内,表示整个数组,一个int型元素4个字节,4*4=16。

sizeof(a+0) =4               此处数组名不是单独在sizeof内,那表示的就是首元素地址,+0,那还是首元素地址,存地址的指针变量大小是四个字节。

sizeof(*a) =4                  此处 不是单独在sizeof内,a代表首元素地址,*a就代表的是首元素——‘1’,求首元素大小。

sizeof(a+1) =4               首元素地址加1,那就是第二个元素的地址,还是地址。

sizeof(a[1]) =4               a[1]数组中的第一个元素,整型数据4字节。

sizeof(&a) =4                 此处&a就代表整个数组的地址,但是  地址啊,放指针变量里面的,所以还是4字节。

sizeof(*&a) = 16            &a是a的地址,那*&a就代表整个数组了,所以是16字节。

sizeof(&a+1) =4             此处&a代表的是数组a的地址(整个数组),虽然数组地址和数组首元素地址的值是一样的,但代表的意义完全不相同。这里(&a+1),是向后移动16字节(数组a总大小),那么(&a+1)代表的是数组a尾元素后一位的那个元素地址。

sizeof(&a[0]) =4             这就不用说了,取第一个元素地址

sizeof(&a[0]+1) = 4        嗯,第二个元素地址。


        求整型数组的还是比较简单的,但要记住这些规则,毕竟后面复杂的多了去了,比如字符型数组啊,字符串啊,二维数组啊,以及strlen对它们操作啊,这些都是面试官爱出的题。一定要弄清楚明白。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值