주소를 가르키는 변수 ( == 포인터 변수 )
이녀석의 뜻은 그냥
0과 같은데
nullptr로 해주는 이유는
아무것도 가르키지 않는다는 의미로 넣어준 것이다.
int * pInt = nullptr;
에서 * 는 뭐냐?
int자료형 변수를 가르키는 "가르키는 변수"가 된다.
i라는 변수가 있으면 i의 주소값을 가져올 수 있다.
즉, 주소를 저장한다.
메모리의
특정 주소 위치에다가 값을 넣도록 명령어가 만들어진다.
메모리의 위치를 지칭 하기 위해서 .
이렇게 하면 현재 pInt에는 i의 주소값이 저장되어있는데
int pInt = &i;
는 i의 주소를 저장한 것인데 int 은 "선언"이다.
사진처럼 *pInt를 하게 되면은
내가 저장하고 있는 그 "주소"값으로 "참조"하겠다 라는 뜻이다.
즉, 그 주소로 접근을 하겠다.
그래서 이렇게 값 수정이 가능하다.
정수형 방식
실수형 방식
인지 따져봐야한다?
100
105
가 있일 경우 1당 얼마나의 주소의 크기? 차이? 주소 차이가 나는지 알아야 한다.
이때 숫자 1당 주소의 단위는 "바이트"이다.
또한 주소를 표현하는 방식은 "정수 타입"이다
100 102가 있을 때 이 사이의 얼마만큼의 메모리 공간이 있는 것인가?
2바이트
주소의 단위 표현은 "정수"이고 단위는 1바이트 이기 때문이다.
대충 이런식임.
주소를 알아서 휘리릭 갔는데
여기 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 관점에 따라 값을 다르게 볼 수 있다.
해당 포인터에게 전달된 주소를 해석하는 단위.