sizeof operator
객체 또는 타입의 크기를 조회합니다.
객체의 실제 크기를 알아야 할 때 사용됩니다.
목차 |
구문
sizeof(
type
)
|
(1) | ||||||||
sizeof
expression
|
(2) | ||||||||
두 버전 모두 size_t 타입의 값을 반환합니다.
설명
참고 사항
컴퓨터 아키텍처에 따라, byte 는 8비트 이상으로 구성될 수 있으며, 정확한 수치는 CHAR_BIT 로 제공됩니다.
sizeof ( char ) , sizeof ( signed char ) , 그리고 sizeof ( unsigned char ) 는 항상 1 을 반환합니다.
sizeof는 함수 타입, 불완전한 타입들( void 포함), 또는 bit-field lvalues와 함께 사용할 수 없습니다.
구조체나 공용체 타입의 피연산자에 적용될 경우, 결과는 내부 및 후행 패딩을 포함한 해당 객체의 총 바이트 수입니다. 후행 패딩은 해당 객체가 배열의 요소일 경우, 이 배열의 다음 요소의 정렬 요구사항이 충족되도록 합니다. 즉, sizeof ( T ) 는 T [ ] 배열의 요소 크기를 반환합니다.
|
만약
type
이
VLA
타입이고 크기 표현식의 값을 변경하는 것이
|
(C99부터) |
expression
의 타입이
VLA
가 아닌 경우를 제외하고,
(C99부터)
expression
은 평가되지 않으며
sizeof
연산자는 정수
상수 표현식
에서 사용될 수 있습니다.
|
expression 의 타입이 가변 길이 배열 타입인 경우, expression 이 평가되고 평가 결과 배열의 크기가 런타임에 계산됩니다. |
(C99부터) |
모든 array a including VLA (since C99) 의 요소 개수는 sizeof a / sizeof a [ 0 ] 표현식으로 결정할 수 있습니다. 만약 a 가 pointer type(예: array-to-pointer conversion 이후나 함수 매개변수 타입 조정 시)을 가진다면, 이 표현식은 단순히 pointer type의 바이트 수를 가리키는 타입의 바이트 수로 나누게 됩니다.
키워드
예제
샘플 출력은 64비트 포인터와 32비트 int를 가진 플랫폼에 해당합니다.
#include <stdio.h> int main(void) { short x; // type argument: printf("sizeof(float) = %zu\n", sizeof(float)); printf("sizeof(void(*)(void)) = %zu\n", sizeof(void(*)(void))); printf("sizeof(char[10]) = %zu\n", sizeof(char[10])); // printf("sizeof(void(void)) = %zu\n", sizeof(void(void))); // Error: function type // printf("sizeof(char[]) = %zu\n", sizeof(char[])); // Error: incomplete type // expression argument: printf("sizeof 'a' = %zu\n", sizeof 'a'); // type of 'a' is int // printf("sizeof main = %zu\n", sizeof main); // Error: Function type printf("sizeof &main = %zu\n", sizeof &main); printf("sizeof \"hello\" = %zu\n", sizeof "hello"); // type is char[6] printf("sizeof x = %zu\n", sizeof x); // type of x is short printf("sizeof (x+1) = %zu\n", sizeof(x + 1)); // type of x+1 is int }
가능한 출력:
sizeof(float) = 4 sizeof(void(*)(void)) = 8 sizeof(char[10]) = 10 sizeof 'a' = 4 sizeof &main = 8 sizeof "hello" = 6 sizeof x = 2 sizeof (x+1) = 4
참고문헌
- C23 표준 (ISO/IEC 9899:2024):
-
- 6.5.3.4 sizeof 및 alignof 연산자 (p: TBD)
- C17 표준 (ISO/IEC 9899:2018):
-
- 6.5.3.4 sizeof 및 _Alignof 연산자 (p: TBD)
- C11 표준 (ISO/IEC 9899:2011):
-
- 6.5.3.4 sizeof 및 _Alignof 연산자 (p: 90-91)
- C99 표준 (ISO/IEC 9899:1999):
-
- 6.5.3.4 sizeof 연산자 (p: 80-81)
- C89/C90 표준 (ISO/IEC 9899:1990):
-
- 3.3.3.4 sizeof 연산자
참고 항목
|
C++ 문서
에 대한
sizeof
연산자
|