將兩個指標的值的差異列印到物件

將兩個指標的值減去物件會產生有符號整數 * 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 如果要減去的兩個指標不指向同一個物件,則行為未定義。