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