首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ptrdiff_t

在头文件<stddef.h>中定义

?

?

typedef / *实现定义* / ptrdiff_t;

?

?

ptrdiff_t 是减去两个指针的结果的带符号整数类型。

注意

如果可能有负值,则ptrdiff_t用于指针算术和数组索引。 使用其他类型的程序(如int)可能会失败,例如, 64位系统,当索引超过INT_MAX时,或者它依赖于32位模块化运算。

只有指向同一数组元素的指针(包括指向数组末尾的指针)才可以相互减去。

如果一个数组非常大(大于PTRDIFF_MAX个元素,但小于SIZE_MAX个字节),两个指针之间的差别可能不能表示为ptrdiff_t,那么减去两个这样的指针的结果是未定义的。

对于短于PTRDIFF_MAX的char数组,ptrdiff_t作为size_t的有符号对应部分:它可以存储任何类型数组的大小,并且在大多数平台上与intptr_t同义)。

代码语言:javascript
复制
#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;
}

可能的输出:

代码语言:javascript
复制
PTRDIFF_MAX = 9223372036854775807
p2-p1 = 5

扩展内容

size_t

由sizeof运算符返回的无符号整数类型(typedef)

offsetof

从结构类型开始到指定成员(函数宏)的字节偏移量

| 针对ptrdiff_t 的C ++文档 |

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com