C언어 배열 바이트 사이즈 및 개수 구하기

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 };

c-array-sizeof-1

배열 사이즈 바이트값 구하기

배열의 사이즈는 배열 개수에 자료형의 기본 바이트수를 곱하면 됩니다. 또는 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

자료형마다 메모리 사이즈가 다르다는 것을 알고 있는 것이 중요합니다.