CPP_어소_27_포인터

CJB_ny·2022년 5월 26일
0

CPP_AROTHO

목록 보기
25/83
post-thumbnail

포인터

주소를 가르키는 변수 ( == 포인터 변수 )

이녀석의 뜻은 그냥

0과 같은데

nullptr로 해주는 이유는

아무것도 가르키지 않는다는 의미로 넣어준 것이다.

int * pInt = nullptr;

에서 * 는 뭐냐?

int자료형 변수를 가르키는 "가르키는 변수"가 된다.

i라는 변수가 있으면 i의 주소값을 가져올 수 있다.

즉, 주소를 저장한다.

주소란?

메모리의

특정 주소 위치에다가 값을 넣도록 명령어가 만들어진다.

메모리의 위치를 지칭 하기 위해서 .

포인터 사용

이렇게 하면 현재 pInt에는 i의 주소값이 저장되어있는데

int pInt = &i;
는 i의 주소를 저장한 것인데 int
은 "선언"이다.

사진처럼 *pInt를 하게 되면은

내가 저장하고 있는 그 "주소"값으로 "참조"하겠다 라는 뜻이다.

즉, 그 주소로 접근을 하겠다.

그래서 이렇게 값 수정이 가능하다.

주소를 표현하는 방식

  • 정수형 방식

  • 실수형 방식

인지 따져봐야한다?

100


105

가 있일 경우 1당 얼마나의 주소의 크기? 차이? 주소 차이가 나는지 알아야 한다.

이때 숫자 1당 주소의 단위는 "바이트"이다.

또한 주소를 표현하는 방식은 "정수 타입"이다

메모리 공간

100 102가 있을 때 이 사이의 얼마만큼의 메모리 공간이 있는 것인가?

2바이트

주소의 단위 표현은 "정수"이고 단위는 1바이트 이기 때문이다.

대충 이런식임.

왜 int의 주소를 가질 수 있는것은 int* 밖에 없노?

주소를 알아서 휘리릭 갔는데

여기 char가 있어? int가 있어? long이 있어?

하는 일이(문제) 발생하면 안된다.

int는 4바이트라

int* pInt는 4바이트 만큼 접근 하려는 것이다.

int* => 자기가 가르킬(주소의) 타입을 정해 놓은 것임

강제 캐스팅

이렇게 float f의 주소를 강제로 int형으로 형변환 하여 주소를 넣게 되면

이런 상황인데

그다음 그 주소에 접근을 해서 값을 가져오세요~ (64번째 줄) 이다.

i = 100 들어가 있고 f는 실수 표현 체계로 3.0f들어가 있는 상태

실행하면 엄청 큰 이상한 숫자 들어가있는 거 확인 가능.

왜? (제일 중요)

지금 int* pInt는 주소를 가르키는데 int형 자료표현 방식으로 float f를 보겠다 라는 뜻이다.

그런데 float f는 실수 표현 방식 (2진수로) 표현되어있는데

iInt는 알게 뭐노? -> 정수표현 방식으로 이 3.0f를 읽어 버려서

3.0f을 실수 표현방식으로 데이터가 들어가 있는 것을 int형(2진수)로 읽어버리니까

이런 커다란 값이 들어가있게 된것이다.

왜? 한 부분 제대로 캐치해야함.

모든 개념이 이 근본 원리에 의해 싹다 파생됨.

이해안가면 이 근본 원리 생각하면됨.

중요한 말

메모리안에 "데이터"는 "똑같은데" 어떻게 해석 or 관점에 따라 값을 다르게 볼 수 있다.

포인터 해석

해당 포인터에게 전달된 주소를 해석하는 단위.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글