地址中的以下增量如何工作..

时间:2014-06-26 14:09:25

标签: c

$ cat try1.c

#include<stdio.h>
void main()
{
        int arr[]={1,2,3,4};
        printf("%lu--%lu--%lu--%lu\n", arr, arr+1, &arr, &arr+1);
}

$ gcc try1.c -o try1
$ ./try1
140736912750144--140736912750148--140736912750144--140736912750160
$ ./try1
140735606483504--140735606483508--140735606483504--140735606483520
$

&amp; arr给出数组的基址,即第0个元素地址。 但为什么&amp; arr + 1增加数组的大小而不是1 sizeof(int),即4B。

2 个答案:

答案 0 :(得分:1)

arr + 1中,arr是一个衰减为指针的数组。指向int的指针。因此arr + 1arr[1]的地址。

&arr + 1中,您获取arr的地址,该地址是指向长度为4的int数组的指针。然后您递增该指针。并且因为该指针是指向长度为4的int数组的指针,&arr + 1是恰好超过arr结尾的地址。

答案 1 :(得分:1)

  

&amp; arr给出数组的基址,即第0个元素地址

&arr为您提供与&arr[0]相同的地址,但这并不意味着指针类型相同。 arr隐式转换为int *,其中&arr的类型为int(*)[4]。根据指针算法+ 1在第一种情况下为您提供基地址+sizeof(int),在第二种情况下为您提供+sizeof(int[4])