type* val;
이있을때 val은 type으로 정의된 타입을가지고있는 메모리의 주소를 long 형으로 들고있어
{;
여기서 추가로 설명하자면 c++을 빌려와서 cout << val해보면 << 는 const void*로 오버로드되는데 중요한건 그냥 type*을 void*로도 인식을 한다는거야
그리고 윈도우즈에 LPVOID라는타입도 존재하는데 얘도 그냥 void*야 모든 포인터는 void*로 형변환이가능해
그럼 type* 을 void* 로 형변환 할수있겟지?
L -> long
P -> 포인터
VOID -> 타입을 모른다 로 쪼갤수있어
즉 LPVOID는 롱형의 숫자들이라고도 취급할수있는데
(직접건드리면 위험해서 안건드려)
}
단항 간접 참조 연산자 *을 앞에붙여서 사용(*val)하면
연산자 * 이 해당메모리주소로 엑세스(접근)해주는 연산자야
그때 비로소 그메모리의 값을 다루는거고
때문에 val은 특정매모리를 값으로 들고있는 변수라고 볼수있는거야
이쯤되면 윈도우즈에 HDC, HWND로 이해를 도와줄게
{;
각 타입들을
Handle 디바이스 컨텍스트
Handle 윈도우창
으로 풀어쓸수가있어
여기서 핸들은 왜있고 그뒤에있는건 뭘까?
DC는 윈도우os가 지원해주는 함수중에 getDC로 생성할스있는데 윈도우os에서는 우리가 이DC를 직접들고있는걸 원하지않아 그래서
getDC로 생성된 DC를 다룰수있는 핸들(HDC)를 반환해주는거야
반환된 HDC는 이후 윈도우 함수에 넣어주면 해당 핸들에 맞는 dc를 함수에맞게 설정해줘
즉 윈도우가 관리하는 dc를 다루기위한 핸들이란거지
HWND도 똑같아 사용자가 윈도우창을 다루기위한 핸들이거야
근데 여기서 핸들이 뭐로되있을까?
예상햇듯이 LPVOID void* 로 되있어
윈도우즈에서 H가 붙어있으면 전부 void*인거지
근데 윈도우os는 사용자가 직접 건드리는걸 싫어해서 핸들을 준다고햇지? 내가 HDC의 값을 맘대로 바꿔도 윈도우os의 dc는 바뀌지않아
핸들번호만 수정햇을뿐이지
}
결론
c에서의 포인터는 메모리주소를 가지고있는 정수형 이고
그 메모리주소로 접근하는 연산자가 *이라고 생각하면
이해하기쉬울거야
같은말을 반복한거같은데 결론이 이해갔으면 다스킵해도되
반박시 니말이맞음 난 가라로 이해한거라
글 ㅈㄴ안읽히게 썼네
누가 이 사람을 위해 잘 읽히는 글 쓰는 방법으로 글 좀 써줘
나만 잘읽히나.....
러스트에 대해서 쓰면 추천해줄게
러스트는 게임인걸요
윈api를 모르면 이해할 수 없는 설명인데
C랑 좆도 상관없는 내용 써놨노