下面程序的输出结果是( )
#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;
}
/* 以下代码对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 }