C언어에서 배열의 사이즈는 전체 사이즈를 바이트로 구한 후, 기준 자료형의 바이트로 나눠서 구합니다. C언어의 자료형별 용량은 1 byte(char)
, 4 byte(int)
, 4 byte(float)
, 8 byte(double)
입니다.
C언어 배열 자료형의 크기
C언어는 자료형마다 차지하는 메모리의 크기가 다릅니다. 메모리의 한 칸의 용량은 1바이트(8bit = 전선 8개)
입니다. 예를 들어 정수형(int
) 자료형이 4바이트
라는 말은 생성시 메모리를 네 칸 차지한다는 뜻입니다.
자료형 | 크기(byte) | 비트(bit) |
---|---|---|
int | 4바이트 | 32bit = 4바이트 x 8bit |
char | 1바이트 | 8bit = 1바이트 x 8bit |
float | 4바이트 | 32bit = 4바이트 x 8bit |
double | 8바이트 | 64bit = 8바이트 x 8bit |
예를 들어 정수형 변수 num
을 네 칸 생성했을 경우 각 배열의 한 칸은 4 byte
입니다. 따라서 num[4]
배열의 총 바이트 수는 16 byte
가 됩니다.
int num[4] = { 1, 2, 3, 4 };
배열 사이즈 바이트값 구하기
배열의 사이즈는 배열 개수에 자료형의 기본 바이트수를 곱하면 됩니다. 또는 sizeof()
함수를 사용하면 됩니다.
9684
개의 배열의 정수 자료형은 몇 바이트일까요? 9684개
x 4 byte
를 하면 38736 byte
이고 sizeof()
함수로도 같은 결과가 나옵니다.
#include<stdio.h>
void main() {
int num[9684] = { 0 }; //9684개의 모든 배열에 정수 0을 대입
int x;
x = sizeof(num);
printf("%d", x); //배열 9684 x int 4 byte = 38736 byte
}
결과
38736
문자 자료형은 배열 개수 x 1 byte
, 실수(double
) 자료형은 배열 개수 x 8 byte
입니다.
#include<stdio.h>
void main() {
char a[9684] = { '0' }; //9684개의 모든 배열에 문자 '0'을 대입
double b[9684] = { 0 }; //9684개의 모든 배열에 실수 0 대입
int A;
int B;
A = sizeof(a); //문자 사이즈 저장
B = sizeof(b); //실수 사이즈 저장
printf("%d \n", A); //배열 9684 x char 1 byte = 9684 byte
printf("%d \n", B); //배열 9684 x double 8 byte = 77472 byte
}
결과
9684
77472
배열 개수 구하기
배열의 개수는 배열의 총 바이트수를 기본 자료형의 바이트 수로 나누면 될 것입니다. sizeof(배열명)
함수로 총 용량을 구한 후 설정한 배열의 자료형을 sizeof(자료형)
의 형태로 나눠주면 됩니다.
배열 원소 개수 = sizeof(배열명) / sizeof(자료형);
배열의 개수를 입력하지 않았지만, 배열의 총 용량을 자료형 값으로 나눠서 배열 개수가 10
개임을 구할 수 있습니다.
#include<stdio.h>
void main() {
int num[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int x;
x = sizeof(num) / sizeof(int);
printf("%d", x);
}
결과
10
자료형마다 메모리 사이즈가 다르다는 것을 알고 있는 것이 중요합니다.