C++ Int*에서 Int로의 잘못된 변환
Junaid Abdullah Mansoor
2023년10월12일
이 짧은 자습서에서는 "int*에서 int로의 잘못된 대화"
오류 메시지에 대해 설명합니다. 먼저 C++의 포인터를 요약해 보겠습니다.
C++의 포인터 예비
포인터는 변수의 주소(16진수 값)를 담는 데 사용되며 변수 이름 앞에 주소 연산자라고도 하는 앰퍼샌드 기호(&
)를 사용하여 포인터 유형 변수에 할당됩니다.
포인터는 다음과 같이 *
기호를 사용하여 선언됩니다.
DataType *p;
다음 명령문을 사용하여 정수 변수의 주소를 정수 포인터에 할당할 수 있습니다.
int* p = &a;
위의 코드 줄은 정수 변수 a
의 주소를 정수 포인터 p
에 할당합니다.
변환 오류
정수형 변수에 정수형 값이 아닌 변수의 16진수 주소 값을 할당하면 “invalid conversion from int* to int”
오류가 발생합니다.
예제 코드:
#include <iostream>
using namespace std;
int main() {
int a = 10;
int p;
p = &a; // invalid conversion error
cout << p;
}
위의 코드는 p
에 정수 변수에 저장할 수 없는 int*
유형의 주소가 할당되므로 07행에서 변환 오류를 생성합니다.
출력:
main.cpp: In function 'int main()': main.cpp:7:7: error: invalid conversion from 'int*' to 'int' [-fpermissive] ptr = &p; //invalid conversion. ^
변환 오류 해결
대부분의 컴파일러는 포인터 유형에서 간단한 데이터 유형으로의 유형 캐스팅을 허용하지 않습니다. 따라서 주소 유형 값이 적절한 포인터 변수에 할당되었는지 확인하여 문제를 해결할 수 있습니다.
예제 코드:
#include <iostream>
using namespace std;
int main() {
int a = 10;
int* p;
p = &a;
cout << p;
}
p
를 선언하는 동안 *
기호는 정수에 대한 포인터가 됩니다. 따라서 유형 변환을 요구하지 않고 정수 변수의 주소를 저장할 수 있습니다.