스택을 구현하는 프로그램을 작성 중입니다. 나는 각 노드는 데이터의 유형을 먹고 싶어 (즉 INT 문자 구조체 등) 내 무효 포인터 데이터가 메모리의 모든 유형을 가리 키도록 할 수스택에 사용 된 C의 빈 포인터
typedef struct node{
void *data;
struct node *next;
}Node;
않는 내 노드 구조체를 선언하는 경우?
스택을 구현하는 프로그램을 작성 중입니다. 나는 각 노드는 데이터의 유형을 먹고 싶어 (즉 INT 문자 구조체 등) 내 무효 포인터 데이터가 메모리의 모든 유형을 가리 키도록 할 수스택에 사용 된 C의 빈 포인터
typedef struct node{
void *data;
struct node *next;
}Node;
않는 내 노드 구조체를 선언하는 경우?
예, 내부 데이터에 액세스하기 위해 void 포인터를 역 참조하는 것과 관련된 몇 가지주의 사항이 있습니다.
Node *node;
그리고 당신은 몇 가지 포인트 구조를 가지고 :
typedef struct Point {
int x;
int y;
} Point;
을 그리고 당신은 노드에 포인트를 넣어 :
Point *p = malloc(sizeof(Point));
p->x = 0;
p->y = 3;
node->data = p;
에서 기본적으로
, 당신은 노드가 있다고 가정 해 포인트 멤버에 액세스하려면 타입 캐스팅을 사용해야합니다.
,210printf("%d\n", ((Point *)node->data)->x);
또는 올바른 타입의 포인터를 지정하고 무효 포인터를 복사 할 수 있습니다 :이 작동하지 않습니다 때문에
Point *p = node->data;
printf("%d\n", p->x);
을 : 무효 포인터가 전혀 포함되어 있기 때문에입니다
printf("%d\n", node->data->x);
컴파일러가 void 포인터가 가리키는 점을 이해하기위한 정보를 입력하십시오.
그리고 void 포인터를 사용하는 방법에 대해 알아야 할 모든 것이 있습니다.
내 void 포인터 데이터가 모든 유형의 메모리를 가리킬 수 있습니까?
예.
간결하게, 예. 즉, int
등의 포인터를 저장하므로 공간을 차지합니다. 또한 목록에 동종 유형이없는 경우 다른 유형을 처리하는 방법을 알고 있어야합니다.
예 가능한 목표를 달성 할 수 있지만 void 포인터의 역 참조를 처리해야합니다. 내가 암시하는 것은 역 참조하는 동안 적절한 유형에 카스트 무효 포인터를 입력해야한다는 것입니다.