본문 바로가기

C 언어

타입 캐스팅(Type Casting)과 역참조(Dereferencing)

1. 타입 캐스팅(Type Casting)

타입 캐스팅은 변수나 상수의 데이터 타입을 다른 타입으로 변환하는 과정을 의미한다. C에서는 자동(암시적) 타입 변환과 명시적 타입 변환 두 가지 방식으로 타입 캐스팅을 수행할 수 있다.

자동 타입 변환
자동 타입 변환은 컴파일러가 소스 코드의 컨텍스트를 기반으로 자동으로 수행하는 타입 변환이다.

예를 들어, int 타입의 변수에 float 타입의 값을 할당할 때, float 값이 int로 자동 변환된다.

int num;
float pi = 3.14;
num = pi; // float에서 int로 자동 타입 변환. num은 3이 됨

 


명시적 타입 변환
명시적 타입 변환(또는 캐스팅)은 개발자가 직접 타입을 지정하여 수행하는 타입 변환이다.

이는 괄호 안에 원하는 타입을 명시하여 수행하며, 특정 타입의 처리가 필요한 연산에서 주로 사용된다.

int total = 7;
int count = 2;
double average;

average = (double)total / count; // int를 double로 명시적 변환하여 실수 나눗셈 수행

 

2.역참조(Dereferencing)

메모리 주소가 있는 곳으로 이동해서 값을 가져오고 싶을 때 역참조 연산자 *를 사용한다. 

포인터는 메모리 주소값을(ex. 0x00FF) 저장하는 변수이다. 포인터가 가리키는 위치의 실제 데이터 값에 접근하려면 역참조 연산자(*)를 사용해야 한다. 이 과정을 역참조라고 한다.

 

즉, 포인터는 변수의 주소만 가리키고 역참조는 주소에 접근해서 변수 주소안에 저장된 값을 가져온다. 

 

*의 사용은 두 가지이며 이 둘을 구분할 줄 알아야한다. 

1. 포인터 선언 : " 이 변수는 메모리 주소값을 가리키는 포인터야"라고 알려주는 역할 

2. 역참조 : "포인터의 메모리 주소를 역참조해서 값을 가져오겠다" 는 의미를 가진다 

포인터 선언과 초기화
포인터를 선언하고 변수의 주소를 할당하는 예시

int value = 10;
int *ptr = &value; // ptr은 value의 주소를 가리킵니다.

 

역참조를 통한 값 접근
포인터를 역참조하여 가리키는  데이터 값( (변수의 주소값이 아닌!) )을 읽거나 수정할 수 있다.

int data = *ptr; // 역참조를 사용해 ptr이 가리키는 변수의 값을 data에 할당
*ptr = 20; // 역참조를 사용해 ptr이 가리키는 변수의 값을 20으로 변경