티스토리 뷰
C와 C++의 가장 강력한 점이 무엇일까. 포인터이다. 왜? 이 질문을 계속 생각 하면서 복습을 진행해보자.
포인터는 무었일까. 나는 4년제 컴퓨터 전공을 했었고 그래서 포인터의 존재는 알고 있었다. 주소를 건네주는것 아닌가. 근데 이게 더블 포인터니 뭐니 하면서 가면 이제 복잡해진다.
포인터는 다음과 같이 선언한다.
int* pInt = nullptr;
(초기화는 알아서)
그리고 다음과 같이 사용한다.
int i = 100;
int* pInt = &i;
cout << *pInt << endl;
여기서 출력되는 *pInt 는 무엇일까. 간단한 코드니 그냥 슥 보고도 100이 나온다는걸 알 수 있다.
와 ! 쉽다 ! 포인터 !
라고 하기에는 포인터는 복잡한 요소가 너무 많다. 이럴거면 왜 포인터를 쓰냐? 그냥 i 출력하면 될거;
라고 생각 할수도 있기 때문이다.
다시! 이럴거면 왜 포인터를 쓰니?
여기까지 봐서는 ㅋㅋ 몰라.. 그거 왜 쓰는데.. 그뭔씹 이라고 생각 할 수 있다.
포인터에 대해 조금 더 자세히 알아보자.
cout 구문을 확인 해보면 *pInt는 pInt에 저장된 값을 출력하는 것이다.
* + 변수명 은 그 변수에 저장되어 있는 값을 출력한다.
그렇다면 그냥 포인터 타입의 pInt는 무엇일까?
*pInt 가 pInt에 저장된 값을 뜻하는 것이니 pInt는 껍데기가 될 것이다. 우리는 이걸 주소라고 부른다.
그럼 pInt에는 일반 값이 아니라 주소를 저장해야한다. 그래서 두번째 줄을 보면 i의 주소를 저장하는데 변수 i앞에 &가 붙어 있다. 변수 앞에 &를 붙이면 변수의 주소가 된다. 즉 &i는 i 의 주소이다.
정리하면!
i = int 타입의 변수
&i = i의 주소
pInt = 포인터 타입의 변수. 주소 저장.
*pInt = 주소 안에 저장되어 있는 값.
가 된다.
또 포인터 타입의 선언은
int* pInt;
float* pFloat;
등으로 선언 가능하다.
그러면 질문으로 포인터 타입인데 선언하는 타입이 중요해요? 라고 말할수 있는데
아주아주아주 중요하다
포인터는 기본적으로 8byte 이다. (사용자의 vs가 64bit라고 가정할 경우)
주소를 저장하는 값은 고정이다. 그러면 이 선언 타입은 무엇인가?
선언 타입은, 포인터에 저장된 주소 안의 값을 해석하는데에 사용된다.
하지만 우리 모두 같은 타입은 같은타입 끼리만 사용해야 한다는 것을 잘 알고 있다.
그러면 우리는 왜 포인터를 쓰는가? 여기까지 봐도 잘 모르겠다. 이쯤되면 안쓰는게 더 옳은게 아닐까?
포인터의 값은 고정되어 있다. 64bit. 주소안에 있는 값은? 뭐 1byte일 수도 있고 어마무시하게 큰 값일 수도 있다. 작은 값들을 이용하면서 자판기 프로그램 만들어두고 뿌듯해 하는 우리와는 달리 실제 프로그램에서는 그런 큰 값을 읽어들이고 복사하는데 시간이 굉장히 많이 걸린다. 그래서 주소를 쓰는것이다. 주소를 사용하면 값에 바로 접근 가능하고 편법으로 접근 불가하게 막아놓은 값에도 접근 가능하다.
다시. 우리는 왜 포인터를 쓰는가?
단순하다. 포인터 안쓰면 개 느려지고 성능 떨어지는 상황이 일어날 수 있어서이다. 물론 이게 모든 답은 아니니 혹시라도... 이걸 읽는 사람이 있다면 이건 그냥 웃으며 넘겨 뇌에 박지 않길 바란다.
이 포스팅은 유투브 어소트락 게임 아카데미의 강의를 듣고 난 뒤 개인적으로 정리한 글 입니다.
https://www.youtube.com/c/AssortRockGameAcademy
어소트락 게임아카데미
DirectX11/12 자체엔진 게임제작, 언리얼 엔진 4 진정한 게임프로그래머가 되고 싶다면 어소트락 게임아카데미 24시간 자습실, 24시간 1:1 코칭 시스템 ASSORTROCK.COM
www.youtube.com
↑어소트락 게임 아카데미 유투브 링크.
'공부 > C++' 카테고리의 다른 글
[C++] 메모리 풀 1 (0) | 2023.03.30 |
---|---|
동적 라이브러리 (0) | 2022.03.27 |
C++ 복습) 상속 (0) | 2021.11.24 |
C++ 복습) const와 레퍼런스(&) (0) | 2021.11.23 |
C++ 복습) 변수 (0) | 2021.11.23 |
- Total
- Today
- Yesterday
- level3
- 고득점 Kit
- Ue
- 고득점kit
- 스택/큐
- 누적합
- 채팅서버
- 너비우선탐색
- 디자인 패턴
- IMGUI
- 데디케이티드
- 정렬
- FPS
- greedy
- DFS
- 재귀
- UE5
- 탐욕법
- LV2
- 완전탐색
- BFS
- C++
- 프로그래머스
- 해시
- Heap
- 개인공부
- LV3
- Unreal 5.1
- sort
- 힙
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |