C语言的数组的地址

问题描述:

有如下程序:

#include<stdio.h>

int main(void)
{
      int a[5] = {1,2,3,4,5};

      int *ptr = (int *)(&a + 1);

      printf("%d %d\n", *(a + 1), *(ptr-1));
 
      return 0;
}


输出结果:2 5

原因解释:

*(a+1) 因为a的地址为数组a第一个元素的地址,所以a+1就是a的第二个元素的地址 输出为2

&a的类型是int[5],则&a+1的偏移量为整个数组a的大小 换句话说它也表示了该数组最后一个元素的下一个地址,上面的ptr则是一个指向int[5]的值针。

所以ptr-1指向数组a最后一个元素 *(ptr-1)输出为5.

由上可知 ,&a+1 比a+5 和 &a[5]使用更方便: 它不必知道将要操作的数组的sizeof

原文地址:https://www.cnblogs.com/biyeymyhjob/p/2674674.html