首页 > 试题广场 >

下面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 + 1):直接用数组名a代表数组首元素的地址,+1再解引用是数组第二个元素的内容
(&a + 1):对整个数组取地址代表数组的地址,对数组的地址+1,可以将整个数组看成一个数据类型,+1则地址往后便宜该数据类型的大小,则ptr指向5的后一位,由于ptr为int类型的指针,-1往前偏移4个字节,指向5,再解引用结果为5
发表于 2020-08-04 09:21:02 回复(0)
&a+1   数组名的地址加1,加的是整个数组长度的字节数;
a+1     是加数组元素大小的字节数
发表于 2021-05-09 15:15:10 回复(0)
*(a + 1):直接用数组名a代表数组首元素的地址,+1再解引用是数组第二个元素的内容
(&a + 1):对整个数组取地址代表数组的地址,对数组的地址+1,可以将整个数组看成一个数据类型,+1则地址往后便宜该数据类型的大小,则ptr指向5的后一位,由于ptr为int类型的指针,-1往前偏移4个字节,指向5,再解引用结果为5
发表于 2022-07-30 09:39:47 回复(0)
排除法,*(a+1)为2,在AD选,D的值其实是个随机数,必错(看这么长可以赌这个是随机数),选A
发表于 2023-06-19 22:03:42 回复(0)
*(a+1)=a[1]=2
发表于 2022-04-05 10:34:51 回复(0)