数组指针移动注意

代码:

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int a[5] = {1, 2, 3, 4, 5};
int *ptr = (int *)(&a + 1);
printf("%d %d\n", *(a + 1), *(ptr - 1));

system ("pause");
return 0;
}

输出:

1
2
2 5
请按任意键继续. . .

从输出 2 可见a是和a[0]是一样的;

&a + 1移动的是一个整个数组的长度,(int *)(&a + 1)强制类型转换为 int 型,*(ptr - 1))再往后移动一个 int,所以输出的是 5。

感谢支持!