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);
}
a和& a如何在内部解释?
答案 0 :(得分:21)
两个语句都打印出地址,可能是为了解释指针算法。
a
和&a
不相同,它们有不同的类型,但保留相同的内存地址。
&a
的类型为int (*)[10]
(其作用类似于指向数组的指针)
a
的类型为int [10]
(其作用类似于指向单个元素的指针)
因此,当您添加1时,请记住这些类型。指针将偏移地址包含的类型的大小。 a+1
偏移量的大小为int,即数组中的第二个元素。 &a+1
完全偏离整个数组。
答案 1 :(得分:12)
嗯,a是数组第一个元素的地址,而& a是数组的地址,但显然它们都有相同的地址。
然而,当您从指针添加(或减去)数字时,编译器会考虑数据的大小,因此在您的情况下(假设int的大小为4个字节)a + 1将大于a 4因为你将指针向前移动一个整数,但是& a + 1会比40更大,因为你的指针会更多,前面是一个ARRAY OF 10 INTEGERS。