C和指针操作问题

时间:2014-04-07 18:17:18

标签: c pointers

以下C程序


#include <stdio.h>
#include <stddef.h>

#define A 1
#define B 1

int main(){
    int a[A], b[B];
    ptrdiff_t delta;


    printf("%p    %p",&a+A,&b);
    delta=&a+A-&b;
    printf("\n* %td *\n",delta);

    if ((&a+A)==&b) printf("\n==1.1");
    if ((&a+A)-&b==0) printf("\n==1.2");
    if (&a==&a) printf("\n==2");

    return 0;
}

产生这个结果:

0x7fff107d5454    0x7fff107d5440
* 5 *

==2

你能解释一下我是0x7fff107d5454-0x7fff107d5440=5吗?

1 个答案:

答案 0 :(得分:2)

这是指针算术。严格来说,0x7fff107d5454 - 0x7fff107d5440是0x14,即十进制20。在指针运算中,实际差值除以基指针类型的大小,在本例中为整数(在您的系统上)为4。所以你得到5。