>  기사  >  백엔드 개발  >  C++ 오류: 포인터 유형과 변수 유형이 일치하지 않습니다. 어떻게 해결합니까?

C++ 오류: 포인터 유형과 변수 유형이 일치하지 않습니다. 어떻게 해결합니까?

WBOY
WBOY원래의
2023-08-21 22:13:031343검색

C++는 강력한 형식의 언어이므로 각 변수는 해당 형식을 지정해야 합니다. 프로그램을 작성할 때 포인터가 자주 사용됩니다. 포인터는 메모리의 주소를 가리키고 해당 주소의 값에 대해 읽기 및 쓰기 작업을 수행할 수 있습니다. 그러나 포인터를 사용할 때 포인터 유형과 변수 유형이 일치하지 않아 컴파일러에서 오류를 보고하는 경우가 종종 발생합니다.

포인터형과 변수형의 불일치 문제는 일반적으로 함수의 매개변수 전달과 할당 과정에서 발생합니다. 예를 들어, 정수 변수 a를 정의한 다음 부동 소수점 유형을 가리키는 포인터 변수 p를 정의합니다. 그런 다음 포인터 p에 a의 주소를 할당합니다.

int a = 10;
float *p;
p = &a;

이 코드는 매우 보입니다. 간단하지만 포인터 p는 부동 소수점 포인터이고 a는 정수 변수이고 유형이 일치하지 않기 때문에 컴파일러에서 오류를 보고하게 됩니다. 이때 컴파일러는 포인터 유형과 변수 유형이 일치하지 않는다는 오류 메시지를 표시합니다.

그럼 이 문제를 어떻게 해결하나요? 이 문제를 해결하는 방법에는 두 가지가 있습니다.

방법 1: 동일한 유형의 포인터 사용

방법 1은 비교적 간단합니다. 동일한 유형의 포인터만 정의하면 됩니다. 정수 변수의 주소를 포인터에 할당해야 한다면 정수 포인터를 정의해야 합니다. 부동 소수점 변수의 주소를 포인터에 할당해야 한다면 부동 소수점 포인터를 정의해야 합니다. . 위의 코드를 다시 작성하여 정수 포인터를 정의하면 코드는 다음과 같습니다.

int a = 10;
int *p;
p = &a;

이때 포인터 p와 변수 a는 같은 타입이기 때문에 컴파일러는 오류를 보고하지 않습니다.

방법 2: 유형 변환 사용

방법 2는 유형 변환을 통해 포인터 유형을 변수 유형과 동일하게 변경할 수 있습니다. C++에는 강제 유형 변환, static_cast 및 동적_캐스트의 세 가지 유형 변환 방법이 있습니다. 여기서는 강제 유형 변환을 소개합니다. 코드는 다음과 같습니다.

int a = 10;
float *p;
p = (float*)&a;

보시다시피 포인터 유형 앞에 작은 괄호를 추가한 다음 괄호 안에 변환해야 할 유형을 적으면 강제로 수행할 수 있습니다. 유형 변환. 강제 유형 변환을 수행하면 프로그램 실행 오류가 발생할 수 있으므로 강제 유형 변환을 수행할 때 변환 결과가 올바른지 확인해야 합니다.

요약:

포인터 유형과 변수 유형 간의 불일치 문제는 C++에서 자주 발생합니다. 동일한 유형의 포인터를 사용하거나 유형 변환을 사용하여 이 문제를 해결할 수 있습니다. 강제 형식 변환의 경우 변환 결과가 올바른지 주의해서 사용해야 합니다.

위 내용은 C++ 오류: 포인터 유형과 변수 유형이 일치하지 않습니다. 어떻게 해결합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.