캐스팅(Casting)은 자료형 변환을 의미하는 용어로 C와 같은 언어에서 유여한 데이터 처리와 메모리 접근을 가능하게 한다. 프로그래밍에서 데이터의 타입(자료형)을 변경하는 과정을 말하며, 주로 한 자료형을 다른 자료형으로 변환할 때 사용된다. 캐스팅은 명시적(explicit)일 수도 있고 암시적(implicit)일 수도 있다.
float*
을 int*
로 잘못 캐스팅하면 예상치 못한 결과가 발생할 수 있음.암시적 캐스팅은 프로그래밍 언어가 자동으로 수행하는 자료형 변환이다. 보통 더 작은 자료형에서 더 큰 자료형으로 변환할 때 사용된다. 예를 들어, int
타입의 데이터를 float
타입으로 자동 변환하는 경우입니다.
int a = 10;
float b = a; // 암시적 캐스팅: int형인 a를 float형으로 자동 변환
a
는 int
형인데, b
는 float
형.a
를 float
형으로 변환함.명시적 캐스팅은 프로그래머가 직접 자료형 변환을 명시해야 하는 경우이다. 특히, 더 큰 자료형에서 더 작은 자료형으로 변환하거나, 데이터 손실 가능성이 있을 때 사용한다.
(새로운자료형) 변수명
// 예시
float f = 3.14;
int i = cint)f; // 명시적 캐스팅: float형을 int형으로 변환
f
는 float
형인데, int
형 변수 i
에 저장하기 위해 명시적으로 int
형으로 변환.i
는 3
이 됨.int a = 10;
float b = (float)a; // 명시적 캐스팅: int형을 float형으로 변환
int
형 변수 a
를 float
형으로 변환하고, b
에 저장.포인터 캐스팅은 포인터의 자료형을 변환할 때 사용된다.
int a = 10;
void *ptr = &a; // 포인터는 void*로 캐스팅 가능
int *p = (int*)ptr; // void*를 다시 int*로 캐스팅
void*
는 형식이 없는 포인터로, 어떤 자료형의 포인터든 담을 수 있지만, 다시 사용할 때는 적절한 형식으로 캐스팅해 주어야 함. printf
에서 주소 값을 출력할 때도 (void*)
로 포인터를 캐스팅하는 이유는 포인터의 자료형에 관계없이 포인터 주소를 다루기 위해서임.명시적 캐스팅은 데이터 손실이 발생할 수 있다.
float f = 3.99;
int i = (int)f; // 명시적 캐스팅: 3.99가 3으로 변환
i
에는 3만 저장됨.