저는 최근에 C++에서 참조와 포인터를 이해하려고 노력했습니다. 조금 혼란스러워지고 있습니다. 각각 *
및 &
연산자는 주소에서 값을 가져올 수 있으며 값의 주소를 얻을 수 있지만이 두 가지를 기본 유형 인 int
과 같이 간단하게 사용할 수없는 이유는 무엇입니까?포인터 변수 사용이란 무엇입니까?
string x = "Hello";
int y = &x; //Set 'y' to the memory address of 'x'
cout << *y; //Output the value at the address 'y' (which is the memory address of 'x')
위의 코드해야, 이론적으로 내 마음 속에, 출력 : 당신은, 예를 들어, 다음과 같은 것을하지 어떤 이상한 포인터 변수 생성을 사용할 수없는 이유
이해가 안 돼요 'x'의 값 'y'는 'x'의 메모리 주소를 포함하므로 '* y'는 'x'이어야합니다. 이것이 작동한다면 (컴파일 할 때 부수적으로 쓰는 것이지, 문자열에서 int로 변환 할 수 없다는 것을 말해 준다. 메모리 주소가 int 벌금에 저장).
특수 포인터 변수 선언 (예 : string *y = &x
)을 사용해야하는 이유는 무엇입니까? 그리고 내부에서 위의 예에서 문자 그대로 포인터 선언에 *
연산자를 사용하면 'y'값을 'x'의 메모리 주소로 설정하지만 나중에 액세스하려는 경우 메모리 주소 ('& x')의 값은 이전에 메모리 주소로 설정 한 '* y'와 동일하게 사용할 수 있습니다.
'int' 변수를 역 참조 할 수 없으므로'* y'가 정의되지 않습니다. –
64 비트 플랫폼 (64 비트 주소 공간 포함)에서 'int'는 32 비트로 정의되어 있기 때문에 메모리 주소가 'int'에 저장 될 수 있다고 믿는 이유는 흥미로울 것입니다 정수. –
@Damien_The_Unbeliever : 그런 다음 질문을 "어디에서나 'intptr_t'를 사용하지 않는 이유는 무엇입니까?"라고 다시 말해주십시오. 또는 "왜 모든 곳에서'void *'를 사용하지 않을까요?". 그는 왜 모든 다른 포인터 유형이 필요한지 알고 싶어합니다. –