[C++] 왜 포인터는 하나의 타입밖에 가리킬 수 없는가?

2019. 7. 27. 20:56 기타/C++

[C++] 왜 포인터는 하나의 타입밖에 가리킬 수 없는가?




포인터는 어떠한 변수를 가리키는 주소값을 가진 변수이다.


그렇다면 데이터를 가지고 있는 것도 아니고 주소값을 가지고 있는 것인데, 왜 한가지 타입밖에 가리킬 수 없을까?


하나의 포인터로 다양한 타입을 가리킬 수 있으면 더 자유롭게 사용할 수 있을텐데..



그것은 포인터가 가리키고 있는 변수의 타입을 알 수 없기 때문이다.


변수의 타입을 알 수 없으면, 포인터가 가리키는 변수의 값을 가져올 때 몇 바이트인지 알 수가 없다.


따라서 포인터가 가리키는 변수의 타입을 알기 위하여, 포인터 변수는 타입이 지정되어 있으며, 해당 타입의 변수만 가리킬 수 있다.



예외적으로 void* 포인터는 모든 타입을 가리킬 수 있다.

하지만 지금 가리키고 있는 변수가 어떤 타입인지 알 수 없기 때문에 그저 주소를 저장하는 용도로만 사용한다.



* 포인터 변수의 크기


앞에서 말했듯이 포인터는 변수의 주소 값을 가리키고 있다.


따라서 타입에 관계없이 모든 포인터 변수의 크기는 동일하다. 그 포인터가 가리킬 수 있는 타입이 무엇이던 간에 어차피 포인터 변수에 보관되는 값은 주소 값이기 때문이다.


32비트 윈도우즈 시스템에서는 모든 포인터 변수의 크기는 4바이트 이다. 4바이트로 모든 주소를 담을 수 있다.



출처: https://hyeonstorage.tistory.com/308?category=601868 [개발이 하고 싶어요]