数组地址问题
void main()
{
int a[5] = {10, 20, 30, 40, 50};
int *ptr = (int *)(&a + 1);
printf("%d, %d", *(a+1), *(ptr-1));
}
*(a+1)输出20没有问题,(&a + 1) 为什么就指到了数组尾部?
*(ptr - 1) = 50;
[解决办法]
1. a和&a[0]都是数组第一个元素的地址,&a是整个数组的地址,他们的值尽管是一样的,但是数据类型是不同的。
2. 指针的加减运算和其类型有关。比如&a + 1中的1就是一个sizeof(a)的大小