名前空間
変種
操作

ptrdiff_t

提供: cppreference.com
< c‎ | types
ヘッダ <stddef.h> で定義
typedef /*implementation-defined*/ ptrdiff_t;

ptrdiff_t2つのポインタの減算の結果の符号付き整数型です。

[編集] ノート

ptrdiff_t は、負の値を取り得る場合に、ポインタ算術や配列のインデックスのために使用されます。 int などの他の型を使用するプログラムは、例えば64ビットのシステムにおいて、インデックスが INT_MAX を超えるとき、または32ビットの剰余算術をあてにしている場合、失敗するかもしれません。

同じ配列の要素を指すポインタ (配列の最後の要素の次を指すポインタも含む) だけがお互いに減算することができます。

2つのポインタの差を ptrdiff_t で表せないかもしれないくらい配列が大きい (PTRDIFF_MAX 個の要素より大きく、 SIZE_MAX バイトより小さい) 場合、そのような2つのポインタの減算の結果は未定義です。

PTRDIFF_MAX より短い文字配列に対して、 ptrdiff_tsize_t の符号付き版としての役割を持ちます。 任意の型の配列のサイズを格納することができ、多くのプラットフォームでは、 intptr_t の同義語です。

[編集]

#include <stdio.h>
#include <stddef.h>
#include <stdint.h>
 
int main(void)
{
    const size_t N = 100;
    int numbers[N];
 
    printf("PTRDIFF_MAX = %ld\n", PTRDIFF_MAX);
    int *p1=&numbers[18], *p2=&numbers[23];
    ptrdiff_t diff = p2-p1;
    printf("p2-p1 = %td\n", diff);
 
    return 0;
}

出力例:

PTRDIFF_MAX = 9223372036854775807
p2-p1 = 5

[編集] 関連項目

sizeof 演算子の結果の符号なし整数型
(typedef) [edit]
struct型の先頭から特定メンバまでのバイトオフセット
(関数マクロ) [edit]
ptrdiff_tC++リファレンス