short array[4]={1,2,4,8},*p,*q;
p=array;
q=&array[4];
 printf("%d,%d\n",(int)(q-p),(int)q-(int)p);
不明白为什么是4和8

解决方案 »

  1.   

    这个是C语言的问题p和q是short类型的指针,p代表array的首地址,array的长度是4,q代表array数组所有元素紧接着首地址p-q差4个short的长度,而每个short的长度是2个字节,所以地址p和地址q之间相差就是8个字节
      

  2.   

    谢谢  最后一个疑问 
    为什么要强制转换为int型
    (int)(q-p)
      

  3.   

    1楼的朋友已经解释得比较清楚了
    (int)(q-p)=4
    你可以理解成,p移动4下(就是++)才能到q?记住,一次移动sizoef(short)个单元,
    int(q)-int(p),实际就是相关几个单元的问题
    上面的次数*(sizoef(short))