#include <stdio.h>
2
3
4 int main()
5 {
6 int a[5] = {11,22,33,44,55},*p =a;
7
8 printf("a[0] = %p\n",&a[0]);
9 printf("a[1] = %p\n",&a[1]);
10 printf("a[2] = %p\n",&a[2]);
11 printf("a[3] = %p\n",&a[3]);
12 printf("a[4] = %p\n",&a[4]);
13 printf("p = %p\n",(p));
14 printf("p+2 = %p\n",(p+2));
15 printf("a = %p\n",a);
16 printf("a+2 = %p\n",(a+2));
17 printf("int = %d\n",sizeof(int));
18 printf("a = %d\n",sizeof(a[5]));
19 printf("&a+1 = %p\n",&a+1);
20
21
22
23 return 0;
24 }
答案是
a[0] = 0x7fff9a512230
a[1] = 0x7fff9a512234
a[2] = 0x7fff9a512238
a[3] = 0x7fff9a51223c
a[4] = 0x7fff9a512240
p = 0x7fff9a512230
p+2 = 0x7fff9a512238
a = 0x7fff9a512230
a+2 = 0x7fff9a512238
int = 4
a = 4
&a+1 = 0x7fff9a512244
1.原来的误区一直是a会移动一个数组,实际上是&a会移动一个数组,而a仅仅移动一个下标。