# 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
