int a[5]={1,2,3,4,5};
int *ptr1=(@a+1);// 取数组a的地址,加1表示加一个a的长度,
// 即如果数组a的地址为0,那么ptr1的值为0+1*(5*4)=20
int *ptr2=a+1; // 取数组a第一个元素的地址,加1表示一个一个数组元素的长度,
// 即如果数组第一个元素a[0]的地址为0,那么ptr1的值为0+1*4=4
该示例中本人一再强调数组首地址和数组地址的含义是不同,不同点就在于对其进行运算时,它的单位长度一个数组的长度,一个是数组元素的长度。更加通用的讲法就是一个指针的移动的单位长度由其所类型决定。一个计算公式就是单位长度=sizeof 指针类型 (如:int *为sizeof int)
另外再看一例:
int *ptr3=a;
int n=(int)a;
int *ptr4=ptr3+1;
int *ptr5=n+1;
int *ptr6=(short*)a+1;
该例中ptr4和ptr5,ptr6的值明显是不同的。如果首地址a为0,则ptr4=4,ptr5=1,ptr6=2;