ptrdiff_t (Type support) – C 中文开发手册

[
  •   C 语言中文开发手册

    ptrdiff_t (Type support) - C 中文开发手册

    在头文件<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同义)。

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

    可能的输出:

    PTRDIFF_MAX = 9223372036854775807
    p2-p1 = 5

    扩展内容

    size_t 由sizeof运算符返回的无符号整数类型(typedef)
    offsetof 从结构类型开始到指定成员(函数宏)的字节偏移量

    | 针对ptrdiff_t 的C ++文档 |

  •   C 语言中文开发手册
    ]
    转载请保留页面地址:https://www.breakyizhan.com/c-3/27839.html
    原文地址:https://www.cnblogs.com/breakyizhan/p/13263276.html