프로그래밍 언어/C, C++

[C언어] 배열, 구조체의 원소 개수 구하기 / sizeof 사용법

sujo 2020. 11. 13. 21:09

배열, 구조체의 원소 개수 구하기 / sizeof 사용법

 

sizeof 란?

  • 메모리의 크기를 바이트(Byte) 단위로 계산한 것.
  • 정수형으로 반환된다.

예제 코드)

1
2
3
4
5
6
7
8
#include <stdio.h>
 
int main() {
    printf("char : %d byte\n"sizeof(char));
    printf("int : %d byte\n"sizeof(int));
    printf("double : %d byte\n"sizeof(double));
    return 0;
}
cs

 

[ 출력 결과 ]

 

 

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

그럼 이러한 sizeof의 특징을 이용하여 배열이 있을 때, 원소의 개수를 구해보도록 하자.

예를 들어, arr[10]이라는 배열이 있다.

1
int arr[10];
cs

이 배열을 sizeof로 계산한다면 몇 바이트가 나올까?

풀어서 본다면 int형이 10개 있는 것이므로

4(int형 메모리 크기) * 10(원소의 개수) = 40 이다.

 

따라서 1차원 배열에서 원소의 개수를 구하기 위해서는 전체 메모리 크기에서 자료형을 나눠주면 된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main() {
    int arr[10];
 
    //전체 크기
    printf("%d\n"sizeof(arr));
 
    //원소의 개수
    printf("%d\n"sizeof(arr) / sizeof(int));
 
    return 0;
}
cs

 

[ 출력 결과 ]

 

 

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

2차원 배열도 비슷한 원리로 쉽게 원소의 개수를 구할 수 있다.

아래와 같은 배열이 있다고 하자.

1
int arr[3][5];
cs

그렇다면 이 배열의 크기는,

 

4(int형 메모리 크기) * 3(행, 원소의 개수) * 5(열, 원소의 개수) = 60이다.

 

  • 전체 원소 개수는 1차원 배열에서 구하는 방식과 같다.
  • 행의 개수는 배열에서 한 줄을 나눠서 구한다.
  • 열의 개수는 한 줄을 자료형으로 나눠서 구한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
int main() {
    int arr[3][5];
 
    //전체 크기
    printf("%d\n"sizeof(arr));
 
    //전체 원소의 개수
    printf("%d\n"sizeof(arr) / sizeof(int));
 
    //행의 개수
    printf("%d\n"sizeof(arr) / sizeof(arr[0]));
 
    //열의 개수
    printf("%d\n"sizeof(arr[0]) / sizeof(int));
 
    return 0;
}
cs

 

[ 출력 결과 ]

 

 

 

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

구조체 배열의 원소 개수 구하는 것도 비슷하다.

이쯤 되면 슬슬 감잡았을 거 같은데 배열의 원소 개수를 구하는 건 별개 아니다.

단순히 전체 크기에서 자료형 크기를 나눠준 값이다.

 

sizeof(구조체 변수명) / sizeof(구조체 이름)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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));
 
    return 0;
}
cs

 

[ 출력 결과 ]