ptrdiff_t

来自cppreference.com
< c‎ | types
定义于头文件 <stddef.h>
typedef /*implementation-defined*/ ptrdiff_t;

ptrdiff_t是一个两指针相减结果所拥有的有符号整数类型。

[编辑] 注意

ptrdiff_t用于指针算术和数组下标使用,若可能使用负值。使用例如int的其他类型做指针算术的程序,可能会在下标超过INT_MAX,或其依赖32位模算术时失败,譬如64位系统上。

只有指向同一数组元素(包括指向数组结尾后一个位置)的指针可以相减。

若数组足够大(大于PTRDIFF_MAX个元素,但小于SIZE_MAX个元素),则两指针间的距离可能无法以ptrdiff_t表示,这两个指针相减的结果未定义。

对于短于PTRDIFF_MAX的数组,ptrdiff_t表现得如同size_t所对应的有符号者:它可以存储任何类型的数组大小,而且在大多数平台上与intptr_t含义相同。

[编辑] 示例

#include <stdio.h>
#include <stddef.h>
#include <stdint.h>
 
int main(void)
{
    const size_t N = 100;
    int numbers[N];
 
    printf("PTRDIFF_MAX = %ld\n", PTRDIFF_MAX);
    int *p1=&numbers[18], *p2=&numbers[23];
    ptrdiff_t diff = p2-p1;
    printf("p2-p1 = %td\n", diff);
 
    return 0;
}

可能的输出:

PTRDIFF_MAX = 9223372036854775807
p2-p1 = 5

[编辑] 参阅

sizeof运算符返回的无符号整数类型
(类型定义) [edit]
从指定结构体类型的起始到指定成员的字节位移
(宏函数) [edit]
ptrdiff_tC++文档