以下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
吗?
答案 0 :(得分:2)
这是指针算术。严格来说,0x7fff107d5454 - 0x7fff107d5440是0x14,即十进制20。在指针运算中,实际差值除以基指针类型的大小,在本例中为整数(在您的系统上)为4。所以你得到5。