C++ 中的 ptrdiff_t 详解 C 中的ptrdiff_t详解首先明确ptrdiff_t不是 C 关键字它是标准库定义的类型别名typedef属于有符号整数类型。1. 核心定义定义位置在cstddef头文件中C 标准库本质typedef定义的有符号整数类型别名用途专门用来表示两个指针之间的差值2. 为什么需要它两个同类型指针相减比如数组指针结果是它们之间的元素个数这个值可能是正数、负数或 0intarr[]{10,20,30};int*p1arr[2];int*p2arr[0];// p1 - p2 2两个元素间隔// p2 - p1 -2ptrdiff_t diffp1-p2;指针差值必须是有符号数所以不能用无符号的size_t不同平台的指针长度不同32位/64位ptrdiff_t会自动适配平台保证跨平台兼容性3. 关键特性有符号整数可以表示正、负、零平台适配32位系统 32位有符号整数64位系统 64位有符号整数唯一合法类型C 标准规定两个指针相减的结果类型必须是ptrdiff_t4. 常用场景计算数组指针的差值表示容器如vector的迭代器差值处理内存偏移量需要负数偏移时5. 简单代码示例#includeiostream// 必须包含这个头文件才能使用 ptrdiff_t#includecstddefintmain(){intnums[]{1,2,3,4,5};int*endnums[4];int*startnums[1];// 指针相减用 ptrdiff_t 接收结果ptrdiff_t distanceend-start;std::cout指针差值distancestd::endl;// 输出 3std::cout类型大小sizeof(ptrdiff_t) 字节std::endl;return0;}6. 和size_t的区别高频考点类型符号主要用途ptrdiff_t有符号两个指针/迭代器的差值size_t无符号表示对象大小、数组长度总结不是关键字是cstddef中的标准类型别名有符号整数专门存储指针差值跨平台兼容是指针运算的标准类型不要和无符号的size_t混用