C++ Int*에서 Int로의 잘못된 변환

Junaid Abdullah Mansoor 2023년10월12일
  1. C++의 포인터 예비
  2. 변환 오류
  3. 변환 오류 해결
C++ Int*에서 Int로의 잘못된 변환

이 짧은 자습서에서는 "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를 선언하는 동안 * 기호는 정수에 대한 포인터가 됩니다. 따라서 유형 변환을 요구하지 않고 정수 변수의 주소를 저장할 수 있습니다.

관련 문장 - C++ Error