網站首頁 編程語言 正文
簡介
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 類型則應保證足以存放同一數組中兩個指針之間的差距,它有可能是負數
總結
原文鏈接:https://blog.csdn.net/keep_contact/article/details/127791653
相關推薦
- 2022-02-18 Syntax Error: Error: Node Sass version 6.0.1 is in
- 2022-07-30 注冊中心eureka的介紹及源碼探索
- 2022-06-04 C#?XML基礎入門小結(XML文件內容增刪改查清)_C#教程
- 2022-10-01 Python類和對象基礎入門介紹_python
- 2024-03-08 SpringBoot開發中VO、DTO的作用,以及使用場景
- 2022-04-24 C/C++字節序的深入理解_C 語言
- 2022-09-22 Python 閉包與裝飾器
- 2022-04-28 WPF使用StackPanel棧面板布局_實用技巧
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支