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

Last updated