Links
Comment on page

02 面试题记录-C语言

001_int ptr=(int )(&a+1)

下面的输出结果是什么?
int main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d\n",*(a+1),*(ptr-1));
}
  • *(a+1)
    • 这里吧a当成一个指针
    • a+1 = a + sizeof(int)
    • a+1指向a的下一个整形地址即 &a[1]
  • (&a+1)
    • 先获取a的地址
    • +1再获取下一个与a同类型(int[5])的相邻地址
    • &a+1 = &a + sizeof(a)
    • 即&a[5],a最后一个元素的下一个地址
  • *(ptr-1)
    • 同*(a+1)原理
    • 指向了&a[5]前一个元素地址
    • 即&a[4]
  • 结果
    • 2,5