반응형
type cast void 포인터를 사용하는 이유는 무엇입니까?
C를 처음 접했을 때, 제가 보이드 포인터에서 얻은 유일한 실용적인 사용법은 주어진 포인터에 다양한 데이터 유형을 저장할 수 있는 다용도 기능입니다.그래서 메모리 할당을 할 때 포인터를 타이핑하지 않았습니다.
저는 가끔 보이드 포인터를 사용하는 코드 예시를 본 적이 있지만, 그것들은 타이프 캐스트됩니다.이것이 왜 유용합니까?공백 대신 원하는 유형의 포인터를 직접 만드는 것은 어떨까요?
C에서 다른 유형에 회피 포인터를 캐스팅하는 데는 두 가지 이유가 있습니다.
- 포인터가 가리키는 것에 접근하려면 (
*(int*)p = 42
) - 만약 당신이 실제로 "진짜" 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
반응형
'programing' 카테고리의 다른 글
백슬래시 탈출 끈을 푸는 방법? (0) | 2023.11.01 |
---|---|
C에서 정의되지 않은 동작인가요? 출력을 논리적으로 예측하지 않으면 (0) | 2023.11.01 |
ASP.NET 5 / MVC 6 Ajax 모델에서 컨트롤러까지 (0) | 2023.11.01 |
접두사가 없는 targetNamespace 및 xmlns, 차이점은 무엇입니까? (0) | 2023.11.01 |
JNDI 이름에 대해 바인딩할 항목 없음 (0) | 2023.11.01 |