sizeof与数组之间那点事

来源:互联网 发布:js多行文字溢出省略号 编辑:程序博客网 时间:2024/05/23 00:42

        今天做题看到很多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对它们操作啊,这些都是面试官爱出的题。一定要弄清楚明白。

原创粉丝点击