第一题:、
(&a)就得到了一个int(*)[5]这样的一个数组指针。再+1就跳过了整个数组,指向了5后面的那个位置。
*(a+1)=a[1]=2; *(ptr-1)=跳一个元素指向5
int main(){
int a[5] = { 1, 2, 3, 4, 5 };
int* ptr = (int*)(&a + 1);
printf("%d,%d", *(a + 1), *(ptr - 1));
第二题:
1.指针+1就跳过一个元素,当前的一个元素就是一个结构体。一个结构体20个字节,转换成16进制就是14 0x100014
2.本来p是struct Test*,但是把整个结构体指针强转成了(unsigned long)p,转成了整数,整数+1,就是单纯的整数+1了
3.转成了int*类型,再+1就跳过了一个元素+4
struct Test
{
int Num;
char* pcName;
short sDate;
char cha[2];
short sBa[4];
}*p = (struct Test*)0x100000;
int main(){
printf("%p\n", p + 0x1);
printf("%p\n", (unsigned long)p + 0x1);
printf("%p\n", (unsigned int*)p + 0x1);
第三题:
&am