본문 바로가기
개발/C, C++

[C/C++] sizeof 연산자

by 77monkey 개발자 2023. 9. 15.
반응형

이제 연산자 시리즈가 거의 끝나갑니다. sizeof 연산자는 개인적으로 유용한데 주의할 점이 있습니다. 알아보도록 합시다. 

 

sizeof 연산자

sizeof 연산자는 변수나 데이터 타입의 크기를 바이트 단위로 계산하는 데 사용됩니다. 

sizeof(변수 또는 데이터 타입)

 

sizeof(변수)

변수의 크기를 바이트 단위로 계산할 때 아래와 같이 사용됩니다. 보통은 배열의 크기를 구하거나 메모리 할당에 필요한 크기를 구할 때 사용됩니다.

#include <stdio.h>

int main() {

	int arr[3] = { 0 };

	printf("arr size : %d\n", sizeof(arr));

	return 0;
}

결과는 아래와 같습니다. 12가 나온 이유는 arr index가 3이라서 3, int가 4 바이트이기 때문에 4, 3 * 4 = 12가 됩니다.

arr size : 12

 

sizeof(데이터 타입)

데이터 타입의 크기를 바이트 단위로 계산할 때 아래와 같이 사용됩니다.

#include <stdio.h>

int main() {
	printf("short size: %d\n", sizeof(short));
	printf("int size: %d\n", sizeof(int));
	printf("double size: %d\n", sizeof(double));

	return 0;	
}

결과는 다음과 같습니다. 

short size: 2
int size: 4
double size: 8

 

주의할 점

크기를 구한다고 생각해서 아래와 같이 코드를 작성하실 수도 있습니다. 하지만 이렇게 코드를 작성할 경우 의도치 않게 실수하시게 됩니다. 아래 코드를 보시면 이상한 점이 보이시나요? sizof(size)를 하면 7이 아니라 4가 됩니다. 그러면 이 값에 의해서 "monk"까지만 출력이 됩니다.

#include <stdio.h>
#include <string.h>

int main() {
	char src[7] = "monkey";
	char dst[7] = { 0 };
	int size = 7;

	memcpy(dst, src, sizeof(size));

	for (int i = 0; i < size; i++)
	{
		printf("%c\n", dst[i]);
	}

	return 0;	
}

이런 실수를 하지 않겠다고 생각하실 수 있는데, 배열과 변수를 함께 쓰다 보면 실수하실 수 있습니다. 잘못된 코드를 수정할 경우 아래와 같습니다. 

#include <stdio.h>
#include <string.h>

int main() {
	char src[7] = "monkey";
	char dst[7] = { 0 };
	int size = 7;

	memcpy(dst, src, size);

	for (int i = 0; i < size; i++)
	{
		printf("%c\n", dst[i]);
	}

	return 0;	
}

이렇게 수정하게 되면 "monkey"가 출력되게 됩니다. 

 

마무리

sizeof는 배열과 관련되어서 많이 사용됩니다. 그래서 변수에도 똑같이 사용하다가 실수하실 수도 있습니다. 헷갈리지 않도록 주의하시길 바랍니다.

반응형

'개발 > C, C++' 카테고리의 다른 글

[C/C++] 연산자 우선순위  (0) 2023.09.18
[C/C++] 캐스팅 연산자  (1) 2023.09.17
[C/C++] 쉼표 연산자(,)  (0) 2023.09.14
[C/C++] 삼항 조건 연산자(삼항 연산자)  (0) 2023.09.13
[C/C++] 비트 연산자  (0) 2023.09.11