본문 바로가기
프로그래밍언어/C언어[Error]

[C언어][Error] 013. assignment makes integer from pointer without a cast – 포인터를 정수에 대입함

by about_IT 2025. 4. 22.

이 오류는 포인터 타입의 값을 정수형 변수에 직접 대입하려고 할 때 발생합니다. C언어에서 포인터는 메모리 주소를 담는 특별한 타입이며, 정수형 변수에 대입하려면 명시적인 형 변환(cast)이 필요합니다.

 

포인터는 일반적으로 4바이트 또는 8바이트 크기를 가지며, int와 같은 정수형과는 호환되지 않기 때문에 타입이 다르다는 이유로 컴파일러가 오류를 발생시킵니다.

 

아래는 오류가 발생하는 예시입니다.

#include <stdio.h>

int main() {
    int *ptr;
    int num;
    ptr = &num;
    int value = ptr;  // 오류 발생: 포인터를 정수에 대입
    printf("%d\n", value);
    return 0;
}

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

error: assignment makes integer from pointer without a cast

 

포인터 값을 정수형으로 사용하려면 명시적 형 변환을 해야 하며, 이마저도 대부분의 경우 추천되지 않습니다.

#include <stdio.h>

int main() {
    int num = 10;
    int *ptr = &num;
    int addr = (int)(uintptr_t)ptr;  // 주소를 정수형으로 변환 (비추천)
    printf("%d\n", addr);
    return 0;
}

※ 주의: 주소를 정수로 저장하거나 조작하는 것은 시스템 의존적이며, 프로그램 안정성을 해칠 수 있습니다.

 

● 실전 팁

  • 포인터는 정수와 다르므로, 직접 대입해서는 안 됩니다.
  • 포인터 연산은 포인터끼리 하거나, 포인터와 정수 간의 산술 연산만 허용됩니다.
  • 주소를 정수로 변환하는 것은 특별한 목적이 있는 경우에만 사용하세요.

 

포인터와 정수는 엄연히 다른 타입이라는 점을 인지하고, 목적이 분명하지 않은 경우 두 타입 간 변환은 피하는 것이 좋습니다.