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

[C언어][Error] 094. invalid type argument of unary ‘*’ – 잘못된 타입에 대해 * 연산 사용

by about_IT 2025. 5. 7.

이 오류는 포인터가 아닌 값에 대해 역참조 연산자(*)를 사용했을 때 발생합니다. C언어에서 * 연산자는 포인터가 가리키는 메모리의 값을 참조하는 용도로 사용되며, 반드시 포인터 타입에만 적용되어야 합니다.


정수형 변수, 구조체, 함수의 반환값 등 포인터가 아닌 타입에 * 연산자를 사용할 경우, 컴파일러는 해당 타입이 역참조 가능한 메모리 주소가 아니라고 판단하여 오류를 발생시킵니다.



● 오류 예제

#include <stdio.h>

int main() {
    int x = 10;
    int y = *x;  // 오류: x는 포인터가 아님
    return 0;
}

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

error: invalid type argument of unary ‘*’


● 해결 방법

역참조(*) 연산자는 반드시 포인터 타입 변수에만 사용해야 하며, 포인터가 아닌 값에 사용할 경우 타입을 점검하거나 적절한 변수로 수정해야 합니다.

#include <stdio.h>

int main() {
    int x = 10;
    int *p = &x;
    int y = *p;  // 정상: 포인터 p를 역참조
    printf("%d\n", y);
    return 0;
}

출력 결과:

10


● 실전 팁

  • * 연산자는 포인터 타입 변수에만 사용해야 합니다.
  • 변수가 포인터인지 아닌지를 항상 확인하고 사용하세요.
  • 함수나 상수를 역참조하려 하지 않도록 주의하세요.

C언어에서 포인터는 메모리를 직접 다루는 강력한 도구이지만, 잘못 사용하면 치명적인 오류를 유발합니다. 반드시 포인터인지 확인 후 * 연산자를 사용하세요.