본문 바로가기
C

sizeof() 연산자

by yororing 2024. 6. 21.

01 sizeof() 연산자

1. 정의

  • 피연산자(연산자의 대상, operand)의 메모리의 크기를 바이트(Byte) 단위로 계산하여 반환
  • 반환 타입: size_t
  • 포인터, 데이터 타입, 구조체, 공용체 모두 사용 가능
// 데이터 타입 피연산자
size_t size_char = sizeof(char); // 1
size_t size_int = sizeof(int); // 4
size_t size_float = sizeof(float); // 4
size_t size_double = sizeof(double); // 8

// 표현식 피연산자
int a = 10;
double d = 10.24;
size_t size = sizeof(a + d); // 8
  • sizeof(a+d)가 8인 이유는 a + d 연산 처리 시 타입이 큰 double로 형변환되기 때문

02 sizeof() 사용

1. 원소 개수 구하기

1) 1차원 배열의 원소 개수 구하기

  • 전체 메모리 크기에서 자료형을 나눠주기
#include <stdio.h>

int main() {
    int arr[10];
    printf("%d\n", sizeof(arr)); // 전체 크기: 40
    printf("%d\n", sizeof(arr) / sizeof(int)); // 원소의 개수: 10
    return 0;
}

2) 2차원 배열의 원소 개수 구하기

  • 전체 원소 개수는 1차월 배열에서 구하는 방식과 동일
  • 행의 개수는 배열에서 한 줄을 나눠서 구하기
  • 열의 개수는 한 줄을 자료형으로 나눠서 구하기
#include <stdio.h>

int main() {
    int arr[3][5];
    printf("%d\n", sizeof(arr)); // 전체 크기: 60
    printf("%d\n", sizeof(arr) / sizeof(int)); // 전체 원소의 개수: 15
    printf("%d\n", sizeof(arr) / sizeof(arr[0])); // 행의 개수: 3
    printf("%d\n", sizeof(arr[0]) / sizeof(int)); // 열의 개수: 5
    return 0;
}

3) 구조체 배열의 원소 개수 구하기

  • 전체 크기에서 자료형 크기 나눠서 구하기
#include <stdio.h>

struct student {
    int num;
    char name[10];
};

int main() {
    struct student s[15];
    printf("구조체 배열 원소의 개수\n");
    printf("%d\n", sizeof(s) / sizeof(struct student)); // 15
    return 0;
}

참조

  1. https://wtg-study.tistory.com/59
  2. https://80000coding.oopy.io/a4b01007-b645-4439-b1aa-50b72ade8283 
  3.