>  기사  >  백엔드 개발  >  C에서 void* 포인터를 정수로 안전하게 변환하려면 어떻게 해야 합니까?

C에서 void* 포인터를 정수로 안전하게 변환하려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-12 10:52:02646검색

How can I safely convert a void* pointer to an integer in C  ?

포인터를 정수로 변환

void* 인수를 적절한 유형으로 변환해야 하는 상황에서는 다음이 중요합니다. 다양한 시스템 아키텍처 간의 호환성을 보장합니다.

64비트 시스템에서는 void*를 캐스팅하여 int는 정밀도 손실을 초래할 수 있습니다. 이 문제를 해결하기 위해 최신 C 접근 방식에는 reinterpret_cast를 사용하는 것이 포함됩니다. 이렇게 하면 이식 가능하고 효율적인 변환이 보장됩니다.

올바른 정수 유형:

포인터를 정수로 올바르게 저장하려면 적절한 유형은 <에 정의된 uintptr_t 또는 intptr_t입니다. ;stdint.h> C99 또는 C 11의 std 네임스페이스.

  • C 11(및 이후): std::uintptr_t
  • C 03: uintptr_t(필요한 경우 extern "C"로 래핑됨) })
  • C99: uintptr_t

올바른 캐스팅 연산자:

C에서는 reinterpret_cast가 포인터 변환에 선호되는 캐스팅입니다. C 캐스트를 사용하지 마세요.

예:

#include <cstdint>

void *p;
std::uintptr_t i = reinterpret_cast<std::uintptr_t>(p);

관련 질문:

  • 무엇입니까? uintptr_t 데이터 유형은 무엇입니까?

위 내용은 C에서 void* 포인터를 정수로 안전하게 변환하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.