2009-11-11 2 views
3

먼저 불쌍한 영어에 대해 유감스럽게 생각합니다. 제 첫 번째 언어가 아닙니다.포인터의 주소 설정 및 초기화

포인터에 대해 공부하는 것이 처음이며 뭔가 이상하다는 것을 발견했습니다.

내가 읽고있는 책에는 * 마커는 'pa'가 나타내는 변수를 의미합니다.

하지만

int a; 
int *pA =&a; 

은 변경 후 (그들은이 경우 *pA을 사용) 및 포인터를 시도하고 초기화 할 때

* = 펜실바니아;

이 작동하지 않으며,

는 pA = & A;

작품입니다.

그래서 내 쿼리는 "포인터를 초기화하고 그냥 대체하는 것 사이에 어떤 차이가 있습니까?" 당신이 포인터를 만들 때

+0

안녕하세요. :) – BobbyShaftoe

+0

Ty,이 곳이 굉장하다고 생각합니다. 사람들은 친절하고 현명합니다. 희망은 내가 나중에 할 수 있고 그 다음에 내가 필요로하는 다른 사람들을 도와 줄 수 있습니다. – Rhee

답변

3
int a; 

이 스택

int* pA = &a; 

이 스택의 int 포인터를 할당하고 가리 키도록 설정 값에 정수를 할당한다. '*'는 선언의 일부입니다.

*pA = &a; 

이 경우 '*'는 "어디에서 pA가 보이는지"라고 말하는 연산자이며 int가됩니다. 그런 다음 해당 int를 허용되지 않는 a의 주소로 설정하려고합니다.

pA = &a; 

이제 두 번째 설명과 같습니다. pA의 값을 a를 가리 키도록 설정합니다.

+0

포인터와 변수를 모두 할당 할 때도 궁금합니다. > int a, * p1; <-이 코드는 처럼 작동합니다! '*'가 포인터에 포함되어 있다고 생각하게 만드십시오. – Rhee

+0

두 개의 별도 선언에 대한 바로 그 것입니다. *는 여전히 p1의 선언 (int *)의 일부입니다. 나는 그것이 완전히 직관적이지 않다는 것에 동의한다. 당신은 그것에 익숙해 져야한다. 선언에서 *는 유형의 일부입니다. 연산자는 다른 (그러나 관련된) 의미를가집니다. –

0

당신은 *pA 당신이 값이 포인터가 가리키는 액세스하는 것을 의미하여, 그 후

int *pA;

사용합니다.

&a을 사용하는 경우 변수 a (정수)에 저장된 데이터가 저장되는 메모리 위치의 주소를 반환하는 Address-of Operator을 사용하고 있습니다.

a의 주소를 pA에 복사하는 것이므로 올바른 할당은 pA = &a입니다.이 주소는 메모리 위치의 주소를 보유하기로되어 있습니다.

그러나 *pA은 해당 메모리 위치 (정수)의 값을 나타내며 *pA에 주소를 할당하면 올바르지 않으므로 올바른 구문은 pA = &a입니다.

0

예, 처음 포인터를 선언하면 메모리 주소를 지정할 수 있습니다. 포인터로 선언했기 때문에 * 연산자를 사용합니다. 그러나 다른 곳에서는 *pA은 해당 포인터가 참조하는 값을 취하는 것을 의미합니다 (실제 주소가 아님). 좀 이상하지만 너는 익숙해진다.

int a; 
int *pA = &a; 

그리고 당신이 수행 할 수 있습니다 :

그래서, 당신은이 작업을 수행 할 수 있습니다

pA = &a; 

을하지만 당신은 할 수 없습니다

*pA = &a; 

을 즉합니다 "라고 때문에 pA =가 가리키는 값. "

*pA = a; 

을 그리고 당신이 값이 pA를 가리키는 설정 단지 방법입니다

그러나, 당신은이 작업을 수행 할 수 있습니다. 희망이 다소 명확합니다.

0

C에서 "선언 흉내 사용.

당신이 포인터를 선언

int *pa; 

int에 당신은 paint * 또는 그 *paint 것을 볼 수 있습니다.

pa에 int에 대한 포인터를 할당하거나 *pa에 int를 할당 할 수 있습니다.
위의 선언 후에 다음 문이 "작동"하는 이유가 여기에 있습니다.

*pa = 42; 
pa = &a; 

선언 자체에서 초기화 값을 제공하여 정의를 "변환"할 수 있습니다. 정의 int*pa 개체에 대한 정의이며 *pa에 대한 정의가 아닙니다.

int *pa = &a; /* initialize pa, which takes a `int*` */ 
pa = &b;  /* change `pa` with a different `int*` */ 
*pa = 42;  /* change the value pointed to by `pa` */