배열, 구조체의 원소 개수 구하기 / 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 |
'프로그래밍 언어 > C, C++' 카테고리의 다른 글
[C언어] GNU readline 사용법 (1) | 2022.01.18 |
---|---|
[C/C++] atoi 구현 / 문자열을 숫자로 (11) | 2021.04.18 |
[C언어] 문자열을 숫자로, 숫자를 문자열로 (0) | 2021.01.27 |
[C/C++] 최대공약수 구하기 (0) | 2020.10.31 |
[C++] STL sort 정렬 사용하기(오름차순/내림차순) (0) | 2020.10.07 |