2009-05-22 7 views
8

선언에 값에 대한 포인터를 할당 할 수 있습니까? 이런 식으로 뭔가 :C++에서 포인터 초기화

int *p = &(1000); 

&이 연산자의 주소 그리고 당신은 할 수 없습니다 :

int * p = &(1000) 
+4

절대 주소, 즉 임베디드 시스템에 설정하려고하십니까?대답에 큰 차이가 있습니다. –

+1

실제로, 당신이 찾고있는 것을 추측하기는 어렵습니다 ... 나는 당신이 포인터에 대해 새롭고 구두 조건을 혼동스럽게 생각합니다. 모두 ... 어딘가에서 시작해야합니다. :-) –

답변

22

예, 당신이 선언의 값으로 포인터를 초기화 할 수 있습니다, 그러나 당신은 할 수 없다 상수에 적용하십시오 (가능하다면 재미있을 것입니다).

int foo = 1000; 
int *p = &foo; 

또는 유형 캐스팅 : 다른 변수를 사용해보십시오

int *p = (int *)(1000); // or reinterpret_cast<>/static_cast<>/etc 
+2

문자열 상수는 특별한 경우입니까? 그것은 "const char *"일 필요가 있지만 ... – dmckee

+3

예, 문자열 리터럴은 lvalue 표현식이므로 포인터 객체가 아닌 배열 객체를 참조한다는 점에서 특별합니다. char const * p = & "hello there"[0]; 'char const * (= p) [0]; –

+0

그것은 작동하지 않습니다, 나는 시도했지만 일부 가비지 유형 값을 표시합니다. **'int * p = (int *) 100;'**. ** 000003E8' ** – Ravi

2

음. 나는 당신이 상수의 비 const 주소를 취할 수 있다고 생각하지 않습니다.

하지만이 작동합니다

int x = 3; 
int *px = &x; 
cout << *px; // prints 3 

나이 :

const int x = 3; 
const int *px = &x; 
const int *pfoo = reinterpret_cast<const int*>(47); 
4

무엇에 대해 :

// Creates a pointer p to an integer initialized with value 1000. 
int * p = new int(1000); 

테스트 및 작품. ;-)

+3

하지만 삭제하는 것을 잊지 마세요! – GManNickG

7

내게는 두 가지 명확한 점이 없습니다. 포인터를 특정 값 (예 : 주소)으로 설정 하시겠습니까? 아니면 포인터가 특정 변수를 가리 키도록 하시겠습니까?

후자의 경우 주소 연산자 만 사용할 수 있습니다. 포인터의 주소some_int_variable으로 설정됩니다.

int *p = &some_int_variable; 
*p = 10; // same as some_int_variable = 10; 

다음 무엇을 수동으로 포인터의 값의 악 변화하고 있습니다. 당신이 그것을하고 싶지 않은지 모른다면, 당신은 그것을하고 싶지 않습니다.

전자의 경우

(일부 특정 주어진 주소로 즉 설정), 당신은 단지 INT를 가지고 주소로 해석되지 않습니다 컴파일러 때문에

int *p = 1000; 

할 수 없습니다.

int *p = reinterpret_cast<int*>(1000); 

지금, 포인터가 주소의 결과는 구현 정의 된 것을 1000 주를 어떤 정수를 (희망) 참조합니다 : 당신은이 명시 적으로 수행해야 컴파일러에게해야합니다. 그럼에도 불구하고, 그것은 의미론이며 컴파일러에게 그것에 대해 알려주는 방식입니다.

업데이트 :위원회는 메모로 제안 된 이상한 행동을 고쳤으며, 그 대안으로 전에 해결 방법을 제공했습니다. See here.

관련 문제