int main()
{  
int num[6]={1,2,3,4,5,6};
int* ptr=(int*)(&num+1);
printf("%d",*(ptr-1));
}
输出为什么会是6呢,百思不得其解,求大侠帮助啊。谢谢了。。

解决方案 »

  1.   

    你要一步一步看,&num 是取num数组的地址然后再加一 也就是加到了整个数组后面的一个(6的后面一个地址),然后强转为int*类型,你输出呢又把地址又减了1(减到了6的地址),然后转为int所以就是6了啊。
      

  2.   

    num 类型是int *
    &num 类型是int (*)[6]&num + 1 == num + 6
      

  3.   

    想继续问下,num不就是num【6】数组的第一个数的指针嘛?我&num不就是取第一个数的指针的地址吗?为什么成了取了num【6】的地址了呢?感觉不明白啊。。谢谢大侠了啊。
      

  4.   

    num是num[0]的地址
    &num是num数组的地址
    数值"总是相等",但指针类型不同指针就是地址——我们可以把指针认为是用来存放地址的数据类型。不能把指针简简单单的当成一个整型数,虽然地址的值是一个整型数据。指针是有类型的,但是这个类型不是给指针分配内存的,而是用来寻址的。指针类型决定指针跨内存单元的步长。
      

  5.   

    &num取的是数组块的地址,是整个一数组的地址,&num+1就跳过了这个数组的整个地址,跳到了下一个地址块,再减一将它转换为整型就是6了