ptrdiff_t
|
헤더 파일에 정의됨
<stddef.h>
|
||
|
typedef
/*implementation-defined*/
ptrdiff_t
;
|
||
ptrdiff_t
는 두 포인터의
뺄셈 결과
의 부호 있는 정수 타입입니다.
|
|
(C99부터)
(C23까지) |
|
|
(C23부터) |
목차 |
참고 사항
ptrdiff_t
는 음수 값이 가능할 경우 포인터 연산과 배열 인덱싱에 사용됩니다.
int
와 같은 다른 타입을 사용하는 프로그램은 인덱스가
INT_MAX
를 초과하거나 32비트 모듈러 연산에 의존하는 경우 64비트 시스템에서 실패할 수 있습니다.
동일한 배열의 요소들(배열의 끝 바로 다음을 가리키는 포인터 포함)을 가리키는 포인터들끼리만 서로 뺄셈할 수 있습니다.
배열이 매우 커서(
PTRDIFF_MAX
요소보다 크지만
SIZE_MAX
바이트 이하인 경우) 두 포인터 간의 차이가
ptrdiff_t
로 표현될 수 없을 때, 이러한 두 포인터를 뺀 결과는 정의되지 않습니다.
char 배열의 길이가
PTRDIFF_MAX
보다 짧은 경우,
ptrdiff_t
는
size_t
의 부호 있는 대응 타입으로 작동합니다: 모든 타입의 배열 크기를 저장할 수 있으며 대부분의 플랫폼에서
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) |
|
|
구조체 타입의 시작부터 지정된 멤버까지의 바이트 오프셋
(function macro) |
|
|
C++ documentation
for
ptrdiff_t
|
|