int main()
{
int a[] = {1,2,3,4,5};
printf("Base Address of array = %p\n",a);
printf("Address1 = %p \t Address2 = %p\n",a+1,&a+1);
return 0;
}
在印刷品的情况下" a"表示数组的基址,但第一个增加4个字节,第二个增加20个字节。有什么特别的原因吗?
输出:
Base Address of array 0x7fff2059b240
Address1 = 0x7fff2059b244 Address2 = 0x7fff2059b254
答案 0 :(得分:1)
&a
指向的大小为20个字节(整个数组:4个字节x 5个元素),而a
指向的大小为4个字节(单个{{1 }})。他们都在同一地址的事实是无关紧要的;它们是解释那个地址的不同方式。
答案 1 :(得分:1)
当你增加a+1
a
实际上是一个指向int
的指针,所以它增加了4
个字节,即int的大小。但是当你执行&a
时,它会成为5
整数数组的地址,所以如果你增加它,你将跳过5个整数的数组大小。