1.4 sizeof 연산자

벌써 마지막 산술 연산자를 다루는 시간이군요.

**sizeof는 크기를 반환하는 연산자입니다. **

반환하는 값은 바이트 단위입니다. 함수 같지만 연산자입니다. 사용법은 다음과 같습니다.

sizeof(피 연산자);

  • 피 연산자 : 자료형이나 값이 올 수 있습니다.
  • ( ) 괄호는 묶음용입니다. 없어도 당연히 잘 동작합니다.

다양한 자료형과 값의 크기를 출력하는 예제를 살펴봅시다.

#include <stdio.h>
#include <stdbool.h>

int main(void) {
	bool b;
	short s;
	int i;
	float f;
	long long ll;
	
	// 자료형 크기 출력
	printf("bool size : %d, b size : %d\n", sizeof(bool), sizeof(b));
	printf("short size : %d, s size : %d\n", sizeof(short), sizeof(s));
	printf("int size : %d, i size : %d\n", sizeof(int), sizeof(i));
	printf("float size : %d, f size : %d\n", sizeof(float), sizeof(f));
	printf("long long size : %d, ll size : %d\n", sizeof(long long), sizeof(ll));
	
	//값 크기 출력
	printf("10 size : %d\n", sizeof(10));
	printf("3.14 size : %d\n", sizeof(3.14));
	printf("&b size : %d\n", sizeof(&b));
	printf("&f size : %d\n", sizeof(&f));
	printf("&ll size : %d\n", sizeof(&ll));
	
	return 0;
}

[출력]

bool size : 1, b size : 1
short size : 2, s size : 2
int size : 4, i size : 4
float size : 4, f size : 4
long long size : 8,ll size : 8

자료형과 해당 자료형의 변수의 크기는 너무나 당연하겠지만 같게 출력되었습니다.

이번에는 상수와 주소 크기도 예제로 살펴보겠습니다.

#include <stdio.h>
#include <stdbool.h>

int main(void) {
	bool b;
	short s;
	int i;
	float f;
	long long ll;
	
	// 값 크기 출력
	printf("10 size : %d\n", sizeof(10));
	printf("3.14 size : %d\n", sizeof(3.14));
	// 주소 크기 출력
      printf("&b size : %d\n", sizeof(&b));
	printf("&f size : %d\n", sizeof(&f));
	printf("&ll size : %d\n", sizeof(&ll));
	
	return 0;
}

[출력]

10 size : 4
3.14 size : 8
&b size : 8
&f size : 8
&ll size : 8

정수형 상수 4, 실수형 상수 3.24는 8입니다. 그런데 주소 크기는 자료형과 상관 없이 모두 8입니다. 64비트 컴퓨터는 주소를 가리키려면 자료형과 무관하게 64비트 즉 8비트가 필요하기 때문이다.

sizeof 연산자는 연산자입니다. 그런데 함수처럼 sizeof() 형식으로 사용합니다. 연산자니까 괄호를 빼도 실행이 되는지 살펴보겠습니다.

#include <stdio.h>
#include <stdbool.h>

int main(void) {
	
	printf("10 size : %d\n", sizeof 10);
	printf("3.14 size : %d\n", sizeof 3.14 );
	
	return 0;
}

[출력]

10 size : 4
3.14 size : 8

예상대로 잘 동작하네요. sizeof의 피연산자로 변수, 상수뿐 아니라 수식 등 워낙 다양할 수 있어 편의상 괄호를 붙일 뿐입니다. 필수가 아니라 선택이라는 사실만 잊지마세요.

이상으로 산술 연산자에 대해 알아봤습니다.