• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    해결됨

강사님 질문 드립니다.

24.04.18 17:41 작성 24.04.19 15:05 수정 조회수 57

0

 제공해주신 멀티스레드 소켓 프로그램에 LPVOID 형을 가지는 매개변수에 일반 변수를 지정하셨는데

 

LPVOID 는 포인터와 일반변수 모두 가능 한 건지요?

주신 프로그램을 보면

 

SOCKET hClient = 0; // SOCKET 형 변수를 선언

hThread = ::CreateThread( NULL, 0,

ThreadFunction, (LPVOID)hClient, // 주소가 아닌 값을 지정

0, &dwThreadID);

 

만약 가능하다면 내부적으로 어떻게 가능한지 확인 부탁드려봅니다. 늘 좋은 강의 감사합니다. 강사님

답변 1

답변을 작성해보세요.

0

LPVOID는 void* 형 입니다. 그리고 이는 포인터 변수라는 의미로 일반화 할 수 있습니다. 나아가 메모리 주소 하나를 저장할 수 있는 크기를 갖는 메모리 공간으로 볼 수 있습니다. 여기에 주소를 담을 목적으로 선언된 것이지만 이것을 다른 정보를 저장하는 용도로 전용한다 하더라도 C/C++에서는 문제가 되지 않습니다.

애초 국을 담아 먹을 용도로 만들어진 국그릇(형식)을 밥을 담는 용도로 전용(강제 형변환)한다고 해서 큰일이 나지 않고 예의(문법)에 어긋나지 않는 것이라면 허용합니다. 이런 개념을 쉽게 '자유도가 높다'라고 할 수 있겠습니다. 참고하시기 바랍니다. 😄