C에서 불투명 포인터는 무엇입니까?
C에서 불투명 포인터 개념의 사용법과 논리를 알 수 있습니까?
불투명 포인터는 기본 데이터의 세부 사항이 드러나지 않는 포인터입니다 (사전 정의에서 : opaque : 형용사; 볼 수 없음; 투명하지 않음 ).
예를 들어, 헤더 파일에서 선언 할 수 있습니다 (이것은 실제 코드의 일부입니다).
typedef struct pmpi_s *pmpi;
pmpi
불투명 구조체에 대한 포인터 인 유형을 선언하므로 선언하는 struct pmpi_s
모든 pmpi
것은 불투명 포인터가됩니다.
해당 선언의 사용자는 다음과 같은 코드를 자유롭게 작성할 수 있습니다.
pmpi xyzzy = NULL;
구조의 실제 "정의"를 모른 채.
그런 다음 정의에 대해 알고있는 코드 (예 : pmpi
처리 기능을 제공하는 코드) 에서 구조를 "정의"할 수 있습니다.
struct pmpi_s {
uint16_t *data; // a pointer to the actual data array of uint16_t.
size_t sz; // the allocated size of data.
size_t used; // number of segments of data in use.
int sign; // the sign of the number (-1, 0, 1).
};
헤더 파일의 사용자가 할 수없는 작업 인 개별 필드에 쉽게 액세스 할 수 있습니다.
불투명 포인터 에 대한 자세한 내용은 Wikipedia 페이지 에서 찾을 수 있습니다 .
주요 용도는 라이브러리 사용자로부터 구현 세부 정보를 숨기는 것입니다. 캡슐화 (C ++ 군중이 당신에게 말할 것임에도 불구하고)은 오랫동안 사용되었습니다 :-)
사용자가 라이브러리를 효과적으로 사용할 수 있도록 라이브러리에 대한 세부 정보 만 게시 하고 더 이상 게시하지 않으려 고합니다 . 더 많이 게시하면 사용자에게 의존 할 수있는 세부 정보가 제공됩니다 (예 : 크기 변수 sz
가 구조의 특정 위치에 있다는 사실로 인해 컨트롤을 우회하고 직접 조작 할 수 있음).
그러면 내부를 변경할 때 고객이 심하게 불평하는 것을 발견 할 수 있습니다. 구조 정보가 없으면 API는 제공하는 항목으로 만 제한되며 내부에 대한 조치의 자유는 유지됩니다.
이름에서 알 수 있듯이 불투명 한 것은 우리가 볼 수없는 것입니다. 예 : 나무는 불투명합니다. 불투명 포인터는 정의 시점에 내용이 노출되지 않은 데이터 구조를 가리키는 포인터입니다. 예:
struct STest * pSTest;
불투명 포인터에 NULL을 지정하는 것이 안전합니다.
pSTest = NULL;
참조 URL : https://stackoverflow.com/questions/7553750/what-is-an-opaque-pointer-in-c
'UFO ET IT' 카테고리의 다른 글
Drupal 행동 (0) | 2020.12.30 |
---|---|
관리자로 실행중인 PowerShell에서 네트워크 드라이브에 액세스 할 수 없습니다. (0) | 2020.12.30 |
Python에서 함수를 중첩 할 때 오버 헤드가 있습니까? (0) | 2020.12.30 |
Java 직렬화-java.io.InvalidClassException 로컬 클래스가 호환되지 않습니다. (0) | 2020.12.30 |
JSLint가 " 'return'후 예기치 않은 'else'"에 대해 불평하는 이유는 무엇입니까? (0) | 2020.12.30 |