sizeof 연산자 (C)sizeof Operator (C)

sizeof 연산자는 피연산자 형식의 개체를 저장하기 위해 필요한 저장소 공간(바이트)을 제공합니다.The sizeof operator gives the amount of storage, in bytes, required to store an object of the type of the operand. 이 연산자를 사용하면 프로그램에서 컴퓨터 종속 데이터 크기를 지정하지 않아도 됩니다.This operator allows you to avoid specifying machine-dependent data sizes in your programs.

구문Syntax

sizeof unary-expression  
sizeof ( type-name )  

설명Remarks

이 피연산자는 unary-expression 식별자이거나 괄호로 묶은 형식 지정자인 형식 캐스트 식입니다.The operand is either an identifier that is a unary-expression, or a type-cast expression (that is, a type specifier enclosed in parentheses). unary-expression은 비트 필드 개체, 불완전한 형식 또는 함수 지정자를 나타낼 수 없습니다.The unary-expression cannot represent a bit-field object, an incomplete type, or a function designator. 결과는 부호 없는 정수 계열 상수입니다.The result is an unsigned integral constant. 표준 헤더 STDDEF.H에서는 이 형식을 size_t로 정의합니다.The standard header STDDEF.H defines this type as size_t.

sizeof 연산자를 배열 식별자에 적용하면 해당 결과는 배열 식별자가 나타내는 포인터의 크기가 아닌 전체 배열의 크기입니다.When you apply the sizeof operator to an array identifier, the result is the size of the entire array rather than the size of the pointer represented by the array identifier.

sizeof 연산자를 구조체 또는 공용 구조체 형식 이름 또는 구조체 또는 공용 구조체 형식의 식별자에 적용하면 해당 결과는 내부 및 후행 여백을 포함하는 구조체 또는 공용 구조체의 바이트 수입니다.When you apply the sizeof operator to a structure or union type name, or to an identifier of structure or union type, the result is the number of bytes in the structure or union, including internal and trailing padding. 이 크기는 메모리 경계에서 구조체 또는 공용 구조체의 멤버를 정렬하는데 사용되는 내부 및 후행 공백을 포함할 수 있습니다.This size may include internal and trailing padding used to align the members of the structure or union on memory boundaries. 따라서 해당 결과는 개별 멤버의 저장소 요구 사항을 추가하여 계산된 크기와 일치하지 않을 수도 있습니다.Thus, the result may not correspond to the size calculated by adding up the storage requirements of the individual members.

크기가 지정되지 않은 배열이 구조체의 마지막 요소인 경우 sizeof 연산자는 배열 없는 구조체의 크기를 반환합니다.If an unsized array is the last element of a structure, the sizeof operator returns the size of the structure without the array.

buffer = calloc(100, sizeof (int) );  

이 예제에서는 sizeof 연산자를 사용하여 컴퓨터 간에 서로 다른 int의 크기를 calloc이라고 하는 런타임 함수에 대한 인수로 전달합니다.This example uses the sizeof operator to pass the size of an int, which varies among machines, as an argument to a run-time function named calloc. 함수에서 반환되는 값은 buffer에 저장됩니다.The value returned by the function is stored in buffer.

static char *strings[] = {  
      "this is string one",  
      "this is string two",  
      "this is string three",  
   };  
const int string_no = ( sizeof strings ) / ( sizeof strings[0] );   

이 예제에서 stringschar에 대한 포인터의 배열입니다.In this example, strings is an array of pointers to char. 포인터 수는 배열의 요소 개수이지만 지정되지 않습니다.The number of pointers is the number of elements in the array, but is not specified. sizeof 연산자를 사용하여 배열의 요소 수를 계산하면 포인터 수를 쉽게 확인할 수 있습니다.It is easy to determine the number of pointers by using the sizeof operator to calculate the number of elements in the array. const 정수 값 string_no는 이 수로 초기화됩니다.The const integer value string_no is initialized to this number. 이는 const 값이기 때문에 string_no는 수정할 수 없습니다.Because it is a const value, string_no cannot be modified.

참고 항목See Also

C 연산자C Operators
C++ 기본 제공 연산자, 우선 순위 및 결합성C++ Built-in Operators, Precedence and Associativity