2016-07-06 2 views
-3

, 우리는C++ 포인터의 혼란

int *ip; 

과 같은 코드를 사용하지만 우리는 또한 임의의 정의 된 변수 X 말을 가리 키도록 같은 줄에 포인터를 초기화 할 수 있습니다.

int x; 
int *ip = &x; 

우리는 또한 예를 들어 코드의 다른 라인의 포인터 변수를 초기화 할 수 있습니다,

int x; 
int *ip; 
ip = &x; 

내 질문은 그 I는 포인터 변수를 초기화하는 *ip를 사용할 때

int x; 
int *ip; 
*ip = &x; 

Visual Studio에서 오류를 제공 함 :

Error C2440 '=': cannot convert from 'int *' to 'int'

누군가 나에게 설명해 주실 수 있습니까? 저는 C++을 배우기 시작했습니다.

+0

어떤 줄에서 오류가 발생합니까? –

+1

게시 한 코드 줄은 작동하지만 (작동하지 않는) 코드 줄을 게시하는 것을 잊었습니다. 그것은 당신을 도우려는 사람에게 도움이되지 않습니다. –

답변

7

데이터 유형을 확인하십시오. 당신이

ip = &x; 

을 쓸 때

이는 assignment statement입니다. x (포인터, 기본적으로 int *)의 주소를 ip에 저장하려고합니다.이 포인터는 int (다시 int *)에 대한 포인터 유형의 변수이기도합니다. 문제 없다. 한편

, 당신이 또한 할당입니다

*ip = &x; 

작성하려고하지만, 여기가 *ipint 유형 및 &xint *과 그들이 호환되지 않습니다. 따라서 컴파일러는 좋은 것을 경고합니다. 이 initialization뿐만 아니라 간단한의 할당은 때문에


FWIW,

int *ip = &x; 

은 괜찮습니다. 정의시 변수 ip (int *)을 초기화하고 있습니다. 변수가 정의하고 여기에 초기화지고, 기억하는 것은 ip하지 *ip이며,이

*ip = &x; 

(내가 이미 언급 한 바와 같이, 부적절 를 작성 매우 다르다.)

+4

당신은 바로 내 입에서 단어를 가져갔습니다. –

+1

@JesperJuhl 또는 키보드? :) –

+0

가장 빠른 손가락 _ (사상가 _ _ 첫 번째 :) –

0

주의 수 :

여기
  • ip = &x; 당신이 값 곳 ip을 설정 여기 x

  • *ip = x;의 주소 포인터 ip를 할당 : 사이에 차이가 있습니다 ~에 가리키고 값이 x

주의 : *ip = &x; 모두의 혼합이므로

0

난 당신의 혼란 만 선언 라인에서 포인터의 구문에서 생각 작동하지 않습니다. 당신은 포인터를 선언 할 때

, 당신은 define symbol **p** to be of type Pointer to **int**을 의미하고, 할당 =p하지 *p에 가치를 제공하는 int *p 물품.

선언 행에 없으면 혼동이 없습니다! p은 포인터입니다. *p이 값입니다.

다른 말로하면 ... 포인터를 선언하면 ptr2int p = &i에 의해 완료되었습니다, 나는 그것이 분명 했다을 추측한다.

많은 사람들이 int *p 대신 int* p으로 포인터 유형을 선언하는 이유입니다. 사람들을 행복하게 만드는 작은 의미 :

건배.