21. 포인터

P4·2023년 6월 14일
0
post-thumbnail

포인터

#include <stdio.h>

int main(void)
{
	int* pInt = nullptr;

	int i = 100;
	float f = 3.f;
	
	int* pI = (int*)&f;

	i = *pI;

	return 0;
}
  • nullptr은 아무것도 들어가지 않았다는 뜻

  • 주소의 단위는 byte --> 8bit (bit단위로 주소에 접근할 수는 없음)

    • ex) 100번지 -- 101번지 -- 102번지 이렇게 있으면

    • 100번지와 101번지 사이에 1byte, 101... 1byte해서 총 2byte가 있는거임


int타입의 주소를 받을 수 있는건 int타입의 포인터 변수만 되는 이유

  • 주소를 찾아갔을때 그 주소에서 얼만큼의 공간을 가야 값을 찾을 수 있는지 알게하기 위해서

  • 이걸 안알려주면 주소에서 1byte 접근해야하는지 4byte 접근해야 하는지 모름

    • ex) int값에 접근하려면 그 주소로 가서 4byte만큼 찾아야됨

    • char은 1byte만큼... 이걸 알려줘야해서 타입을 쓰는거임 int* pInt


만약 저 코드처럼 int타입의 포인터 변수에 강제로 실수 주소를 넣는다면? --> i가 1077936128 막 이렇게 나옴

  • 이렇게 나온 이유는 값이 실수여도 포인터 변수는 처음 선언될 때 int로 해석하도록 선언되었기 때문에?

  • 3.0이라는 부동소수점으로 표현된 실수값을 int의 관점으로 해석해서 저렇게 이상한 큰 수가 나온거임

  • 그냥 int* pI = &f; 이렇게 쓰면 애초에 컴파일도 안해줌


중요!

  • 앞의 수업에서 했던 것과 마찬가지로 메모리 안에 담겨 있는 값이 똑같아도 어느 관점에서 보는지에 따라 다르게 출력되는거임

  • 이진수 -1 = 255 이거나, 이진수 3.f = 1077936128 다 같은 개념인거임

profile
지식을 담습니다.

0개의 댓글