首页 > 试题广场 >

下面C程序的输出结果是 int main() { i

[单选题]
下面C程序的输出结果是
int main()
{
    int a[5] = {1, 2, 3, 4, 5};
    int *ptr=(int *)(&a + 1);
    printf("%d, %d",*(a + 1), *(ptr -1 ));
    return 0;
}
  • 2, 5
  • 1, 3
  • 1, 5
  • 2, 43586
这里 a本来已经代表了数组的首地址,那么 &a代表了将一个为5个元素大小的数组作为一个整体后,他的地址就是&a.那么&a+1就相当于下一个同等大小的数组的地址。   注意这里又强行将指针类型准换为int型——即数组中元素的类型
则后面输出时,ptr-1就代表了a[4]这个位置
所以输出为2,5
发表于 2018-03-24 23:33:38 回复(0)
应聘前端岗位的我表示对C一脸懵逼
发表于 2018-04-08 13:34:07 回复(1)
*a表示指向a[0]的指针,*(a + 1)表示指向a[1]的指针。
&a表示整个数组的地址,&a+1表示整个数组在内存空间中的下一位地址,因此已经不指向这个数组了。 int *ptr=(int *)(&a + 1);是将这个当前数组之外的地址转换成int型,*(ptr -1 )就是从当前数组地址的下一位地址减1,回到了当前数组的最后一位,结果是5.
发表于 2018-04-22 13:37:50 回复(0)
发表于 2018-03-24 23:10:36 回复(0)