int main(int argc, char **argv) { int a[4] = {1, 2, 3, 4}; int *ptr = (int *)(&a + 1); printf("%d", *(ptr - 1)); }
打印一下
void test7() { int a[4] = { 1, 2, 3, 4 }; printf("a = %p\n\n", a); int* ptr = (int*)(&a + 1); printf("ptr = %p\n", ptr); printf("ptr+1 = %p\n", ptr+1); printf("ptr+2 = %p\n\n", ptr+2); printf("*(ptr - 1) = %d\n", *(ptr - 1)); printf("*(ptr - 2) = %d\n", *(ptr - 2)); }
输出
a = 00BAF800 ptr = 00BAF810 ptr+1 = 00BAF814 ptr+2 = 00BAF818 *(ptr - 1) = 4 *(ptr - 2) = 3
可以看出来,类型不同,指针加的字节数也不同。