
{
int a[] = {3,4};
printf("a=%p\n",a); //打印a地址
printf("&a=%p\n",&a); //打印&a地址
long b = a+1;
printf("b=%p\n",b);
long c = (&a)+1;
printf("c=%p\n",c);
return 0;
}
运行结果:
a=0x7ffee51ea8c0
&a=0x7ffee51ea8c0
b=0x7ffee51ea8c4 //b只偏移一个元素地址空间
c=0x7ffee51ea8c8 //c偏移了整个数组地址空间
虽然两者的地址值是一样的,都指向同一个地址
但数组名a相当于指针,而&a相当于指针的指针,类型是不同的。
举个比较容易看到区别的例子
比如
char s[100];
char **p = &s;
这里s和p实际的值是一样的。
但如果你用s++和p++之后,再观察s和p的值,就完全不一样了