如图,我们先看以下问题
在稍微思考过后,先把你的答案记下来吧。
接下来我们分析
****1中
arr被单独放入sizeof中,表示整个数组,则计算整个数组的大小,
且sizeof计算的大小包含\0,则在sizeof看来数组arr有7个元素,
类型为char,7乘1=7
****2中
arr没有单独放入sizeof中,也没有与&结合,所以这里表示首元素地址,
+0表示跳过0个字节,则跳到首元素地址的位置,
而地址在32位中是4个字节大小,在64位中是8个字节大小
****3中
arr表示首元素地址,*表示解引用,
arr被解引用后便是首元素,
首元素为a,类型为char,
故大小为1
****4中
arr[1]与*(arr+1)同义,表示第2个元素,
第二个元素为b,类型为char,
故大小为1
****5中
arr与&结合,这里的arr表示整个数组,
故&arr表示整个元素地址,
地址在32位中是4个字节大小,在64位中是8个字节大小
****6中
&arr+1这种形式从运算符的优先级我们知道&的优先级高于+,
所以可以看做(&arr)+1,&与arr结合表示整个数组地址,
这样&arr则跳过了一整个数组大小,跳到了如图的位置,
而地址总归是地址所以在32位中是4,在64位中是8
****7中
&arr[0]表示首元素的地址,
+1则跳过了一个元素大小,跳到了如图位置
其实也就是跳到了a[1]的位置,求第二个元素地址的大小,
该地址在32位是4,在64位是8
****最后附上64位的运算结果
如图
end.