关于数组名和指针的有关问题

关于数组名和指针的问题
C/C++ code
int a[5] = {1, 2, 3, 4, 5};
int *p = (int *)(&a + 1);
printf("%d\n%d\n", *(a + 1), *(p - 1));


问下,这个 &a + 1 到底移动了几个字节?


------解决方案--------------------
探讨
C/C++ code
int a[5] = {1, 2, 3, 4, 5};
int *p = (int *)(&a + 1);
printf("%d\n%d\n", *(a + 1), *(p - 1));


问下,这个 &a + 1 到底移动了几个字节?

------解决方案--------------------
移动了sizeof(a)个字节,即20个字节···
探讨
C/C++ code
int a[5] = {1, 2, 3, 4, 5};
int *p = (int *)(&a + 1);
printf("%d\n%d\n", *(a + 1), *(p - 1));


问下,这个 &a + 1 到底移动了几个字节?

------解决方案--------------------
a是int* a+1 是4
&a 是int a[5], 所以 &a+1 是4*5
------解决方案--------------------
数据类型有很多 比如说int float char 类型,那么指针也有很多类型比如说int *p就是指向int类型,char *p指向char 类型 *(&a)a为数组名,那么这个指针就是指向数组类型,+1就是加把整个数组的长度
------解决方案--------------------
这个是数组头指针的区别了。a是该数组的首地址,&a是将该数组看为一个整体,是该数组整体的首地址。所以加&与不加&是有区别的。