如果两个指针指向同一个数组,可以将它们相减,结果是两个指针之间的元素数。让我们以本章开头介绍的街道地址的类比为例。假设我住在第五大道118号,我的邻居住在第五大道124号。每间房子的地址间距是2(我这边的街道地址是连续的偶数)。那么我邻居的房子就是我房子前面的(124-118)/2(或3)房子(我邻居的房子和我的房子分开两个房子,即120和122)。指针之间的减法与上述方法相同。
指针是可以减去的十六进制地址。p2是buf[3]的地址;p1是buf[1]的地址;因为是整数数据,一个整数是4字节,p2-p1=(p2指向的地址-p1指向的地址)/sizeof(int)p1和p2的差是2个整数,即8字节;第二种方法相当于将地址转换成10个基数并进行减法,因此数字是8;inta[10]int*p1=&a[1]]int*p2=&a[3]printf(%ldn,p2-p1)printf(%dn,(int)p2)printf(%dn,(int)p1)打印出转换成int类型的地址。(如果不转换int,则直接打印地址时可以看到8字节的差异。)