将两个指针的值的差异打印到对象
将两个指针的值减去对象会产生有符号整数 * 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 如果要减去的两个指针不指向同一个对象,则行为未定义。