arr 与&arr区别

2017-03-23  本文已影响0人  贰shu
        int arr[5] = {1,2,3,4,5};
        int *ptr = (int *)(&arr+1);
        int result1 = *(arr+1);
        int result2 = *(ptr-1);
        printf("%d,%d\n",result1,result2); // 结果为2,5
        printf("%p\n%p\n",arr+1, &arr+1);

为何result2的结果为5呢?

问题的关键在于 int *ptr = (int *)(&arr+1);这一行代码,arr得到的是数组第一个元素的首地址,与&arr[0] 一样,但是&arr指向的是一个包含五个int型元素的数组首地址.

arr+1偏移量为sizeof(int)*1;

&arr+1偏移量为sizeof(int)*5;

上一篇下一篇

猜你喜欢

热点阅读