返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >一文带你快速了解C/C++标准库中的ptrdiff_t
  • 109
分享到

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

ptrdiff_tc语言 ptrdiff_tc++ ptrdiff_t 2022-11-16 00:11:50 109人浏览 薄情痞子
摘要

目录简介示例存在的意义?补充:ptrdiff_t与size_t的区别总结简介 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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

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

本文链接: https://lsjlt.com/news/173040.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作