데이터 타입과 메모리
C는 정적 타입 언어이며 각 자료형은 고정된 크기의 메모리를 점유한다.
기본 데이터 타입
정수형
타입 | 크기 (byte) | 설명 |
---|---|---|
char | 1 | 문자 (ASCII) |
short | 2 | 짧은 정수 |
int | 4 | 일반 정수 |
long | 4 또는 8 | 긴 정수 |
long long | 8 | 매우 긴 정수 |
실수형
타입 | 크기 (byte) | 설명 |
---|---|---|
float | 4 | 단정도 실수 |
double | 8 | 배정도 실수 |
long double | 8 또는 16 | 확장 배정도 실수 |
기타
void
: 반환값 없음_Bool
: 논리형(0 또는 1)
타입에 따른 메모리 해석
주소를 어떤 타입으로 접근하느냐에 따라 해석이 달라진다.
int x = 0x12345678;
char* p = (char*)&x;
printf("%d\n", x); // 305419896
printf("%x\n", *p); // 78
int
로 해석하면 4바이트 정수char
로 해석하면 첫 1바이트만
암묵적 형변환
컴파일러가 자동으로 변환. 안정성과 유연성 사이 균형이 필요하다.
안전한 변환
작은 타입 -> 큰 타입, 표현 손실 없음
int i = 10;
double d = 3.14;
double result = i + d; // i -> double로 변환됨
안전하지 않은 변환
큰 타입 -> 작은 타입, 표현 손실 있음
long long big = 1LL << 40;
int x = big; // int 범위 초과 (오버플로우)