一文带你快速了解C/C++标准库中的ptrdiff_t

 更新时间:2022年11月11日 10:52:12   作者:康来个程  
ptrdiff_t是C/C++标准库中定义的一个与机器相关的数据类型,ptrdiff_t类型变量通常用来保存两个指针减法操作的结果,下面这篇文章主要给大家介绍了关于C/C++标准库中ptrdiff_t的相关资料,需要的朋友可以参考下

简介

ptrdiff_t是C/C++标准库中定义的一个与机器相关的数据类型。ptrdiff_t类型变量通常用来保存两个指针减法操作的结果。

ptrdiff_t定义在stddef.h(cstddef)这个文件内。

ptrdiff_t通常被定义为long int类型。

ptrdiff_t定义在C99标准中。

标准库类型(library type)ptrdiff_t 与 size_t 类型一样,ptrdiff_t也是一种与机器相关的类型,在 cstddef标准库头文件中定义。size_t 是unsigned 类型,而 ptrdiff_t 则是 signed 整型。

这两种类型的差别体现了它们各自的用途:size_t类型用于指明数组长度,它必须是一个正数;ptrdiff_t 类型则应保证足以存放同一数组中两个指针之间的差距,它有可能是负数。

示例

#include <stdio.h>
#include <stddef.h>
#include <string.h>
 
int main(void)
{
    char str[] = "Hello world!";
    char* pstart = str;
    char* pend = str + strlen(str);
    ptrdiff_t difp = pend - pstart;
    printf("%d\n", difp);
    return 0;
}

存在的意义?

在编译器中我尝试过用int接收两个指针的差距离,既然可以用int来表示,那他存在的意义是什么的,难道只是优雅吗?(优雅还是很重要的!)

size_t/ptrdiff_t数据类型是和机器相关的。其sizeof字节长度和指针字节长度是一致的。

根据上表,我们可以看到指针的字节长度:

  • 16 bit系统中,占用2字节(arduino nano)
  • 64 bit系统中,占用8字节(vc64/ios模拟器)
  • 32 bit系统中,占用4字节(除了上述3个系统外)

这种与机器类型相关的数据类型,我们可以称为机器相关数据类型

如果现在有个需求,我需要跨平台的使用统一数据类型来表示指针地址范围,该怎么办?

答: 两种方式:

  • typedef long long int64;
    使用最大字节长度的数据类型来容纳各个平台下的地址数据
  • 使用c/c++预先定义的机器相关数据类型: size_t/ptrdiff_t

补充:ptrdiff_t与size_t的区别

标准库类型(library type)ptrdiff_t 与 size_t 类型一样,ptrdiff_t 也是一种与机器相关的类型,在cstddef 头文件中定义。

size_t 是unsigned 类型,而 ptrdiff_t 则是 signed 整型

size_t类型用于指明数组长度,它必须是一个正数;ptrdiff_t 类型则应保证足以存放同一数组中两个指针之间的差距,它有可能是负数

总结

到此这篇关于C/C++标准库中ptrdiff_t的文章就介绍到这了,更多相关C/C++标准库中ptrdiff_t内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • C++基础入门教程(六):为什么创建类的时候要用new?

    C++基础入门教程(六):为什么创建类的时候要用new?

    这篇文章主要介绍了C++基础入门教程(六):为什么创建类的时候要用new?本文讲解了使用new创建动态结构体、为什么要有new、自动存储(自动变量、局部变量)、动态存储、vector和array等内容,需要的朋友可以参考下
    2014-11-11
  • C语言 深入浅出讲解指针的使用

    C语言 深入浅出讲解指针的使用

    指针是C语言中一个非常重要的概念,也是C语言的特色之一。使用指针可以对复杂数据进行处理,能对计算机的内存分配进行控制,在函数调用中使用指针还可以返回多个值
    2022-03-03
  • Pthread 并发编程线程自底向上深入解析

    Pthread 并发编程线程自底向上深入解析

    这篇文章主要为大家介绍了Pthread 并发编程线程自底向上深入解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Qt生成随机数的方法

    Qt生成随机数的方法

    本文主要介绍了Qt生成随机数,生成随机数主要用到了函数qsrand和qrand,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • C++实现栈与分析栈的知识点

    C++实现栈与分析栈的知识点

    这篇文章主要介绍了C++实现栈与分析栈的知识点,栈(stack)是计算机中常用的一种线性数据结构,经常有资料使用“操作受限”来形容栈,因为它的压入栈和弹出栈操作只能在栈顶进行,下文更多相关资料,需要的小伙伴可以参考一下
    2022-03-03
  • C语言数组详细介绍

    C语言数组详细介绍

    大家好,本篇文章主要讲的是C语言数组详细介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • 详解c++中的 static 关键字及作用

    详解c++中的 static 关键字及作用

    这篇文章主要介绍了c++中的 static 关键字,在我们日常使用过程中,static通常有两个作用,具体内容在文中给大家详细介绍,需要的朋友可以参考下
    2020-02-02
  • vc6.0中c语言控制台程序中的定时技术(定时器)

    vc6.0中c语言控制台程序中的定时技术(定时器)

    这篇文章主要介绍了vc6.0中c语言控制台程序中的定时技术(定时器),需要的朋友可以参考下
    2014-04-04
  • C++通过控制台访问deepseek接口并进行对话

    C++通过控制台访问deepseek接口并进行对话

    这篇文章主要为大家详细介绍了C++如何通过控制台访问deepseek接口并进行对话,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-02-02
  • C++ using 编译指令与名称冲突问题

    C++ using 编译指令与名称冲突问题

    using 编译指令由名称空间名和它前面的关键字 using namespace 组成,它使名称空间中的所有名称都可用,而不需要使用作用域解析运算符,这篇文章主要介绍了C++ using 编译指令与名称冲突,需要的朋友可以参考下
    2022-11-11

最新评论