C++는 강력한 프로그래밍 언어이지만 프로그램을 작성할 때 실수하기 쉽습니다. 일반적인 오류 중 하나는 "포인터 산술 유형 불일치"입니다. 이 문서에서는 이 오류의 원인과 해결 방법을 설명합니다.
포인터는 C++에서 매우 유용한 데이터 유형입니다. 이를 통해 프로그래머는 메모리의 데이터에 직접 액세스할 수 있습니다. 포인터는 메모리 주소를 저장할 수 있으며 포인터를 사용하여 메모리의 데이터를 조작할 수 있습니다.
포인터를 사용할 때는 포인터가 가리키는 데이터 유형을 고려해야 합니다. 포인터가 가리키는 유형이 포인터 작업 유형과 일치하지 않으면 "포인터 작업 유형 불일치" 오류가 발생합니다.
다음은 샘플 코드입니다.
int numbers[] = {1, 2, 3, 4, 5}; char* p = (char*) numbers; for (int i = 0; i < 5; i++) { cout << *(p + i) << endl; }
이 샘플 코드에서는 정수 배열을 만든 다음 이 배열의 첫 번째 주소를 문자 포인터로 변환합니다. 다음으로 포인터 더하기 연산자를 사용하여 배열의 요소에 액세스합니다. 문자 포인터가 가리키는 주소는 매번 1씩 증가하므로 각 출력의 결과는 불확실합니다.
위 코드를 실행하면 다음과 같은 오류 메시지가 나타납니다.
error: invalid conversion from 'int*' to 'char*'
이것은 정수 배열의 포인터를 문자 포인터로 변환했기 때문입니다. 이는 불법입니다. 문자 포인터의 단계 크기는 1씩 증가할 때마다 1바이트에 불과하고 메모리에 있는 정수 배열의 단계 크기는 일반적으로 4바이트이므로 포인터 추가 작업에 문자 포인터를 사용하면 잘못된 메모리 주소에 액세스하게 됩니다. , 예측할 수 없는 오류가 발생합니다.
이 문제를 해결하려면 포인터가 가리키는 데이터 유형이 포인터 작업 유형과 일치하는지 확인해야 합니다. 위의 예제 코드에서는 문자 포인터를 정수 포인터로 변환해야 합니다.
다음은 수정된 코드입니다.
int numbers[] = {1, 2, 3, 4, 5}; int* p = numbers; for (int i = 0; i < 5; i++) { cout << *(p + i) << endl; }
이 수정된 코드에서는 포인터의 데이터 유형을 문자에서 정수로 변경하고 포인터가 정수 배열을 가리켰습니다. 따라서 이제 포인터 더하기 연산자를 사용하여 배열의 요소에 액세스할 수 있으며 배열의 각 요소가 올바르게 출력될 수 있습니다.
간단히 말하면 C++ 프로그램을 작성할 때 포인터가 가리키는 데이터 유형이 포인터 작업 유형과 일치하는지 확인해야 합니다. 이렇게 하면 "포인터 산술 유형 불일치" 오류를 방지하고 프로그램의 정확성을 보장할 수 있습니다.
위 내용은 C++ 오류: 포인터 작업 유형이 일치하지 않습니다. 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!