日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

一文帶你快速了解C/C++標準庫中的ptrdiff_t_C 語言

作者:康來個程 ? 更新時間: 2022-12-10 編程語言

簡介

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

欄目分類
最近更新