将两个指针的值的差异打印到对象

将两个指针的值减去对象会产生有符号整数 * 1 。所以它至少会使用 d 转换说明符进行打印。

为了确保某个类型足够宽以容纳这样的指针差异,因为 C99 <stddef.h> 定义了 ptrdiff_t 的类型。要打印 ptrdiff_t,请使用 t 长度修改器。

Version >= C99

#include <stdlib.h> /* for EXIT_SUCCESS */
#include <stdio.h> /* for printf() */
#include <stddef.h> /* for ptrdiff_t */

int main(void)
{
  int a[2];
  int * p1 = &a[0], * p2 = &a[1];
  ptrdiff_t pd = p2 - p1;

  printf("p1 = %p\n", (void*) p1);
  printf("p2 = %p\n", (void*) p2);
  printf("p2 - p1 = %td\n", pd);

  return EXIT_SUCCESS;
}

结果可能如下所示:

p1 = 0x7fff6679f430
p2 = 0x7fff6679f434
p2 - p1 = 1

请注意,差异的结果值是通过减去指针的类型的大小来缩放的,这里是 int。此示例中的 int 的大小为 4。

* 1 如果要减去的两个指针不指向同一个对象,则行为未定义。