이 웹 사이트에서 : Windows Data TypesLPCSTR에는 'long'이없고 UINT_PTR에는 포인터가 없습니다.
이 주제가 발생합니다.
LP는 긴 포인터를 나타냅니다.하지만 긴 길이는 아닙니다. UINT_PTR은 부호없는 int 포인터를 나타냅니다. 다시 추정하지만 포인터가 없습니다.
누군가이 사실을 알고 있습니까?
이 웹 사이트에서 : Windows Data TypesLPCSTR에는 'long'이없고 UINT_PTR에는 포인터가 없습니다.
이 주제가 발생합니다.
LP는 긴 포인터를 나타냅니다.하지만 긴 길이는 아닙니다. UINT_PTR은 부호없는 int 포인터를 나타냅니다. 다시 추정하지만 포인터가 없습니다.
누군가이 사실을 알고 있습니까?
참조 "긴 포인터"(LP
-types) :가
곳 번이 long and short pointers했다 (사전 펜티엄). 그리고 그 시대에 WINAPI가 이미 있었고 오늘날에도 여전히 코드와 호환되도록 노력하기 때문에 LPsomething
유형이 생존했습니다. 포인터의 값을 보관 유지를 위해 충분히 넓은 정수의
: UINT_PTR
를 참조
. 다음과 같은 C11-표준 같은 타입을 정의
1 다음 타입 특성과 부호 정수 타입을 지정 오브젝트 포인터를 유지할 수
7.20.1.4 정수형 그런 유효한 무효 포인터가이 형식으로 변환 가능하고, 무효화 포인터로 다시 변환 결과는 원래 포인터와 동일 비교 것이다
intptr_t
다음 일반 E는 임의의 유효한 포인터가이 형식으로 변환 할 수있는 무효로하는 속성으로 부호없는 정수의 타입을 지정하고, 무효화 포인터로 다시 변환 결과는 원래 포인터와 동일 비교 것이다
uintptr_t
이러한 유형은 선택 사항입니다.
긴 포인터는 세그먼트 : 오프셋 메모리 주소 지정이있을 때 16 비트 일로부터옵니다. 긴 포인터 (일명 멀리 포인터)는 세그먼트와 오프셋을 모두 포함했습니다. 근거리 포인터는 세그먼트의 오프셋 만 포함합니다. 그것은 순수하게 Intel x86 아키텍처였습니다. –
UINT_PTR
은 포인터 유형이 아닙니다. 포인터 값을 저장하기에 충분한 너비의 부호없는 정수 유형입니다 (따라서 너비는 대상 플랫폼에 따라 다릅니다). int
및 unsigned int
은 반드시 포인터를 보유 할만큼 충분히 넓지는 않기 때문에 존재합니다 (특히 int
은 여전히 32 비트이고 포인터는 64 비트 임).
int가 32 비트 인 것은 x64에만 국한되지 않습니다. 플랫폼에 64 비트 정수 (LLP64 시스템)가 있더라도 32 비트는 여전히 길지만 CPU가 아니라 컴파일러/시스템에 따라 다릅니다. 예 : 동일한 플랫폼에서 Linux vs MS Windows. –
질문이 모순입니다. – this