ptrdiff_t
|
ヘッダーで定義
<stddef.h>
|
||
|
typedef
/*implementation-defined*/
ptrdiff_t
;
|
||
ptrdiff_t
は、2つのポインタの
減算結果
の符号付き整数型です。
|
|
(C99以降)
(C23まで) |
|
|
(C23以降) |
目次 |
注記
ptrdiff_t
は、負の値が可能性がある場合のポインタ演算および配列のインデックス指定に使用されます。
int
などの他の型を使用するプログラムは、例えば64ビットシステムでインデックスが
INT_MAX
を超える場合、または32ビットのモジュラー演算に依存している場合に失敗する可能性があります。
同じ配列の要素へのポインタ(配列の終端を1つ超えた位置へのポインタも含む)のみが互いに減算できます。
配列が非常に大きく(
PTRDIFF_MAX
要素を超え、かつ
SIZE_MAX
バイト以下)、2つのポインタの差が
ptrdiff_t
として表現できない場合、そのような2つのポインタを減算した結果は未定義です。
PTRDIFF_MAXより短いchar配列の場合、
ptrdiff_t
は
PTRDIFF_MAX
の符号付き対応物として機能します:
任意の型の配列のサイズを格納でき、ほとんどのプラットフォームでは
intptr_t
と同義です)。
実装例
typedef typeof((int*)nullptr - (int*)nullptr) ptrdiff_t; // C23以降有効 |
例
#include <stddef.h> #include <stdint.h> #include <stdio.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); }
出力例:
PTRDIFF_MAX = 9223372036854775807 p2-p1 = 5
参考文献
- C23規格 (ISO/IEC 9899:2024):
-
- 7.19 共通定義 <stddef.h> (p: TBD)
-
- 7.20.3 その他の整数型の制限 (p: TBD)
- C17規格 (ISO/IEC 9899:2018):
-
- 7.19 共通定義 <stddef.h> (p: 211)
-
- 7.20.3 その他の整数型の限界 (p: 215)
- C11規格 (ISO/IEC 9899:2011):
-
- 7.19 共通定義 <stddef.h> (p: 288)
-
- 7.20.3 その他の整数型の制限 (p: 293)
- C99規格 (ISO/IEC 9899:1999):
-
- 7.17 共通定義 <stddef.h> (p: 253)
-
- 7.18.3 その他の整数型の限界 (p: 258)
- C89/C90標準 (ISO/IEC 9899:1990):
-
- 4.1.6 共通定義 <stddef.h>
関連項目
|
sizeof
演算子によって返される符号なし整数型
(typedef) |
|
|
構造体型の先頭から指定されたメンバーまでのバイトオフセット
(関数マクロ) |
|
|
C++ documentation
for
ptrdiff_t
|
|