programing

type cast void 포인터를 사용하는 이유는 무엇입니까?

testmans 2023. 11. 1. 22:13
반응형

type cast void 포인터를 사용하는 이유는 무엇입니까?

C를 처음 접했을 때, 제가 보이드 포인터에서 얻은 유일한 실용적인 사용법은 주어진 포인터에 다양한 데이터 유형을 저장할 수 있는 다용도 기능입니다.그래서 메모리 할당을 할 때 포인터를 타이핑하지 않았습니다.

저는 가끔 보이드 포인터를 사용하는 코드 예시를 본 적이 있지만, 그것들은 타이프 캐스트됩니다.이것이 왜 유용합니까?공백 대신 원하는 유형의 포인터를 직접 만드는 것은 어떨까요?

C에서 다른 유형에 회피 포인터를 캐스팅하는 데는 두 가지 이유가 있습니다.

  1. 포인터가 가리키는 것에 접근하려면 (*(int*)p = 42)
  2. 만약 당신이 실제로 "진짜" C가 아닌 C와 C++의 공통 부분집합에 코드를 쓰고 있다면요.참고 항목 malloc의 결과를 캐스트하면 됩니까?

1의 이유는 분명해야 합니다.두 번째는 C++가 다음과 같은 암묵적 변환을 허용하지 않기 때문입니다.void*C가 허락하는 동안 다른 유형으로.

void 포인터를 함수 매개 변수로 사용할 때 void 포인터가 정수임을 확실히 알 수 있는 등 참조를 해제하려면 void 포인터를 다른 것에 캐스팅해야 합니다.

void some_function(void * some_param) {
    int some_value = *some_param; /* won't work, you can't dereference a void pointer */
}

void some_function(void * some_param) {
    int some_value = *((int *) some_param); /* ok */
}

언급URL : https://stackoverflow.com/questions/16986214/why-type-cast-a-void-pointer

반응형