프로그래밍언어/C언어[Error]

[C언어][Error] 093. incompatible types when assigning to type ‘int *’ from type ‘float *’ – 포인터 타입 불일치

about_IT 2025. 5. 7. 11:53
728x90

이 오류는 서로 다른 타입의 포인터를 직접 대입하려 할 때 발생합니다. 예를 들어 float* 타입의 포인터를 int* 타입 변수에 대입하는 경우, 컴파일러는 두 포인터 타입 간의 불일치를 감지하여 오류를 발생시킵니다. C언어에서는 타입이 명확히 맞지 않는 포인터 간의 대입은 허용되지 않습니다.


포인터는 단순한 메모리 주소를 가리키는 것처럼 보이지만, 내부적으로 가리키는 데이터 타입에 따라 연산 방식과 접근 방식이 달라지므로 타입 안전성을 유지하는 것이 중요합니다.



● 오류 예제

#include <stdio.h>

int main() {
    float f = 3.14;
    float *fp = &f;
    int *ip = fp;  // 오류: float* → int* 대입 불가
    return 0;
}

컴파일 시 다음과 같은 오류 메시지를 출력합니다.

error: incompatible types when assigning to type ‘int *’ from type ‘float *’


● 해결 방법

포인터 타입이 서로 다를 경우, 명시적 타입 캐스팅을 하거나, 타입을 일치시켜야 합니다. 하지만 무분별한 캐스팅은 undefined behavior를 유발할 수 있으므로 주의해야 합니다.

#include <stdio.h>

int main() {
    float f = 3.14;
    float *fp = &f;
    int *ip = (int *)fp;  // 명시적 캐스팅 (위험 가능성 있음)
    return 0;
}

보다 안전한 방법은 포인터 타입을 맞추는 것입니다.

int i = 10;
int *ip = &i;


● 실전 팁

  • 포인터는 가리키는 타입이 일치해야 합니다.
  • 타입이 다르면 명시적 캐스팅을 사용할 수 있지만, 항상 안전성을 고려해야 합니다.
  • 포인터를 다른 타입에 캐스팅하는 행위는 메모리 구조나 정렬 차이로 인해 문제가 될 수 있습니다.

C언어에서 포인터 타입 불일치는 흔한 실수이자 위험 요소입니다. 항상 타입 일치를 우선으로 하고, 불가피할 경우 명확하고 안전한 캐스팅을 사용하세요.

728x90