int main()
{
int a[]={1,2,3,4,5,6,7,8,9,0};
printf("a = %u , &a = %u\n",a,&a);
printf("a+1 = %u , &a+1 = %u\n",a+1,&a+1);
}
Run Code Online (Sandbox Code Playgroud)
a和&a如何在内部解释?
Bri*_*ndy 21
两个语句都打印出地址,可能是为了解释指针算法.
a并且&a不一样,它们有不同的类型,但保持相同的内存地址.
&a类型int (*)[10](其作用类似于指向数组的指针)
a是类型int [10](其作用类似于指向单个元素的指针)
因此,当您添加1时,请记住这些类型.指针将偏移地址包含的类型的大小. a+1按int的大小偏移,即到数组中的第二个元素. &a+1完全偏离整个阵列.
Bob*_*Bob 12
嗯,a是数组的第一个元素的地址,&a是数组的地址,但显然它们都具有相同的地址.
但是,当您从指针添加(或减去)数字时,编译器会考虑数据的大小,因此在您的情况下(假设int的大小为4个字节)a + 1将大于4乘以因为您移动指针前面有一个整数,但是&a + 1会比40更大,因为你指针前面有一个ARRAY OF 10 INTEGERS.