이 오류는 포인터가 아닌 값에 대해 역참조 연산자(*)를 사용했을 때 발생합니다. 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언어에서 포인터는 메모리를 직접 다루는 강력한 도구이지만, 잘못 사용하면 치명적인 오류를 유발합니다. 반드시 포인터인지 확인 후 * 연산자를 사용하세요.