C : Casting

m_ngyeong·2024년 10월 15일
0

C

목록 보기
12/16
post-thumbnail

Casting(캐스팅)

캐스팅(Casting)자료형 변환을 의미하는 용어로 C와 같은 언어에서 유여한 데이터 처리와 메모리 접근을 가능하게 한다. 프로그래밍에서 데이터의 타입(자료형)을 변경하는 과정을 말하며, 주로 한 자료형을 다른 자료형으로 변환할 때 사용된다. 캐스팅은 명시적(explicit)일 수도 있고 암시적(implicit)일 수도 있다.

주의사항

  • 데이터 손실: 큰 자료형을 작은 자료형으로 변환할 때는 데이터 손실이 발생할 수 있음. 예를 들어, 소수를 정수로 변환할 때 소수점 이하가 사라짐.
  • 논리적 오류: 포인터 캐스팅 시, 잘못된 자료형으로 캐스팅하면 메모리 접근 오류를 일으킬 수 있음. 예를 들어, float*int*로 잘못 캐스팅하면 예상치 못한 결과가 발생할 수 있음.

암시적 캐스팅(Implicit Casting)

암시적 캐스팅프로그래밍 언어가 자동으로 수행하는 자료형 변환이다. 보통 더 작은 자료형에서 더 큰 자료형으로 변환할 때 사용된다. 예를 들어, int 타입의 데이터를 float 타입으로 자동 변환하는 경우입니다.

int a = 10;
float b = a;  // 암시적 캐스팅: int형인 a를 float형으로 자동 변환
  • aint형인데, bfloat형.
    이 경우 데이터 손실이 없기 때문에 컴파일러가 자동으로 afloat형으로 변환함.

명시적 캐스팅(Explicit Casting)

명시적 캐스팅은 프로그래머가 직접 자료형 변환을 명시해야 하는 경우이다. 특히, 더 큰 자료형에서 더 작은 자료형으로 변환하거나, 데이터 손실 가능성이 있을 때 사용한다.

형식:

(새로운자료형) 변수명

// 예시
float f = 3.14;
int i = cint)f;  // 명시적 캐스팅: float형을 int형으로 변환
  • ffloat형인데, int형 변수 i에 저장하기 위해 명시적으로 int형으로 변환.
    이 경우 소수점 이하가 잘려나가고 i3이 됨.

C에서의 캐스팅

기본 자료형 변환

int a = 10;
float b = (float)a;  // 명시적 캐스팅: int형을 float형으로 변환
  • int형 변수 afloat형으로 변환하고, 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만 저장됨.


profile
사용자 경험 향상과 지속적인 성장을 추구하는 프론트엔드 개발자 ʚȉɞ

0개의 댓글