题目
阅读下面的代码段,并给出程序的输出。
(1)访问数组元素。
int a[] = {61, 62, 63, 64, 65, 66};
int *p = (int *)(&a + 1);
printf("%d, %d\n", *(a + 1), *(p - 1));
(2)访问联合体元素。
union
{short i;char x[2];
}a;a.x[0] = 10;
a.x[1] = 1;
printf("%d\n", a.i);
解析
这道题主要考察应聘者对数组、指针、联合体及内存布局的理解。
先来看第一道小题,访问数组中的元素。在C/C++语言中,数组的首地址指的是数组的第一个元素的地址。这个地址可以通过数组名加上一个下标来访问,其中下标从0开始。比如:有一个整数数组int arr[5],那么数组的首地址可以通过&arr[0]来获取,这个地址指向数组的第一个元素arr[0]。注意:数组名本身就是数组的首地址,故arr和&arr[0]是等价的。
在本小题中,a是数组首元素地址,a + 1为数组第二