添加到整数数组基址C?

时间:2015-08-26 18:45:01

标签: c arrays

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 

2 个答案:

答案 0 :(得分:1)

&a指向的大小为20个字节(整个数组:4个字节x 5个元素),而a指向的大小为4个字节(单个{{1 }})。他们都在同一地址的事实是无关紧要的;它们是解释那个地址的不同方式。

答案 1 :(得分:1)

当你增加a+1 a实际上是一个指向int的指针,所以它增加了4个字节,即int的大小。但是当你执行&a时,它会成为5整数数组的地址,所以如果你增加它,你将跳过5个整数的数组大小。