[C++] 왜 포인터는 하나의 타입밖에 가리킬 수 없는가?
[C++] 왜 포인터는 하나의 타입밖에 가리킬 수 없는가?
포인터는 어떠한 변수를 가리키는 주소값을 가진 변수이다.
그렇다면 데이터를 가지고 있는 것도 아니고 주소값을 가지고 있는 것인데, 왜 한가지 타입밖에 가리킬 수 없을까?
하나의 포인터로 다양한 타입을 가리킬 수 있으면 더 자유롭게 사용할 수 있을텐데..
그것은 포인터가 가리키고 있는 변수의 타입을 알 수 없기 때문이다.
변수의 타입을 알 수 없으면, 포인터가 가리키는 변수의 값을 가져올 때 몇 바이트인지 알 수가 없다.
따라서 포인터가 가리키는 변수의 타입을 알기 위하여, 포인터 변수는 타입이 지정되어 있으며, 해당 타입의 변수만 가리킬 수 있다.
예외적으로 void* 포인터는 모든 타입을 가리킬 수 있다.
하지만 지금 가리키고 있는 변수가 어떤 타입인지 알 수 없기 때문에 그저 주소를 저장하는 용도로만 사용한다.
* 포인터 변수의 크기
앞에서 말했듯이 포인터는 변수의 주소 값을 가리키고 있다.
따라서 타입에 관계없이 모든 포인터 변수의 크기는 동일하다. 그 포인터가 가리킬 수 있는 타입이 무엇이던 간에 어차피 포인터 변수에 보관되는 값은 주소 값이기 때문이다.
32비트 윈도우즈 시스템에서는 모든 포인터 변수의 크기는 4바이트 이다. 4바이트로 모든 주소를 담을 수 있다.
출처: https://hyeonstorage.tistory.com/308?category=601868 [개발이 하고 싶어요]
'기타 > C++' 카테고리의 다른 글
[C++] 스마트 포인터, operator*(), operator->() 연산자 오버로딩 (0) | 2019.07.30 |
---|---|
[C++] 연산자 오버로딩 정의 (operator) (0) | 2019.07.30 |
[C++] 파일 쓰기 예제 ofstream (0) | 2019.07.30 |
[C++] LinkedList 구현하기 예제 (0) | 2019.07.30 |
[C++] 비트 연산과 쉬프트 (>>, <<) (0) | 2019.07.27 |
[C++] 문자열 입력 getline()과 버퍼오버플로우 (0) | 2019.07.27 |
[C++] string 문자열을 배열에 복사하기 (0) | 2019.07.27 |
[C++] 문자열 합치기 strcat(), 문자열 비교 strcmp() (0) | 2019.07.27 |