我们先来看下图
如果是你,你会认为每一行的输出结果是什么?
接下来我们开始分析
****在1中
****我们知道1中的a被单独使用在数组中,
所以此时的a表示一整个数组。
而int 是其数组储存的类型,一个int 占4个字节,所以是4乘4=16。
1的答案为16。
**** 在2中
****a+0则表示首元素地址,则此时sizeof计算的是a[0]地址的大小。
在32位一个地址的大小为4个字节,而在64位中是8个字节。
2的答案为4或8。
**在3中
a不是单独出现,所以这里表示的是a数组的首元素的地址,
而表示对其解引用,则a表示的是a[0]这个元素本身。
a的第一个元素为1,则求1的大小,因为1是int 类型,则输出结果为4
3的答案为4。
****在4中
与上面的2类似,a表示首元素的地址,+1则表示跳过一个元素地址的大小,
则a+1表示的是a[1]这个元素的地址的大小
所以4的答案为4或8。(在32位中是4,在64位中是8)
****在5中
所以其实a[1]是指2这个元素,则其大小为4(int类型)
5的答案为4。
****在6中
看到这里,你也许会认为结果为4乘4或者4乘8,
但是&a虽然表达的是数组的地址,
但是它也是地址,所以答案为4或8。
6的答案为4或8。
***在7中
由于a跟在&的后面,所以a在这里表示的是整个数组,
而&a则是取了整个数组的地址。则是对a这个数组的地址解引用,得到的是数组中的每一项。
1、2、3、4.一共有四个元素,为int型所以是,4乘4=16个字节
7的答案为16。
****在8中
&a已经分析过了是表示a的地址,
而&a+1表示的则是跳过了a这个数组大小后到达的地址,即上图所示的位置。
当然了,即使是这样,在a之后的地址依旧是地址,
地址只由32位或64位决定大小,即答案为4或8.
8的答案为4或8。
****在9中
&a[0]表示取首元素的地址,答案理所应当是4或8了
9的答案为4或8。
****在10中
a[0]与a表示的含义相同,都是首元素,
因此&a[0]+1与&a+1实际上是等效的,参照上一题,这题的答案依旧是4或8
10的答案为4或8。
最后,附上64位运行的结果。