首页 > 试题广场 >

下面程序的输出结果是( &n...

[单选题]
下面程序的输出结果是(      )
#include <stdio.h>
int main()
{
int  intArray[] = {1, 2, 3, 4, 5};
int  *p = (int *)(&intArray+1);
printf("%d,%d",*(intArray+1),*(p-1));

return 0;
}
  • 1,5
  • 1,6
  • 2,4
  • 2,5
/*
    以下代码对int* p = (int*)(&intArray + 1);进行分解
*/
#include<cstdio>
int main()
{
    int  intArray[] = { 1, 2, 3, 4, 5 };
    
    //此时的p1类型是 int(*)[5],即指向长度为5的int数组的指针
    auto p1 = &intArray;
    
    //因为指向的是长度为5的int数组,所以偏移量是sizeof(int) * 5,即此时p2指向5的下一个位置
    auto p2 = &intArray + 1;
    
    printf("p2 - p1 = %d\n", (char*)p2 - (char*)p1);//输出为20
    
    int* p = (int*)p2;//类型强转为int*
    
    //此时的p-1偏移量为sizeof(int),即指向5的位置
    printf("%d,%d", *(intArray + 1), *(p - 1));//输出2,5

}


编辑于 2019-09-01 11:23:16 回复(0)