2011-09-08 3 views
0

스택을 구현하는 프로그램을 작성 중입니다. 나는 각 노드는 데이터의 유형을 먹고 싶어 (즉 INT 문자 구조체 등) 내 무효 포인터 데이터가 메모리의 모든 유형을 가리 키도록 할 수스택에 사용 된 C의 빈 포인터

typedef struct node{ 
      void *data; 
      struct node *next; 
    }Node; 

않는 내 노드 구조체를 선언하는 경우?

답변

3

예, 내부 데이터에 액세스하기 위해 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; 

에서 기본적으로

, 당신은 노드가 있다고 가정 해 포인트 멤버에 액세스하려면 타입 캐스팅을 사용해야합니다.

,210
printf("%d\n", ((Point *)node->data)->x); 

또는 올바른 타입의 포인터를 지정하고 무효 포인터를 복사 할 수 있습니다 :이 작동하지 않습니다 때문에

Point *p = node->data; 
printf("%d\n", p->x); 

을 : 무효 포인터가 전혀 포함되어 있기 때문에입니다

printf("%d\n", node->data->x); 

컴파일러가 void 포인터가 가리키는 점을 이해하기위한 정보를 입력하십시오.

그리고 void 포인터를 사용하는 방법에 대해 알아야 할 모든 것이 있습니다.

1

내 void 포인터 데이터가 모든 유형의 메모리를 가리킬 수 있습니까?

예.

1

간결하게, 예. 즉, int 등의 포인터를 저장하므로 공간을 차지합니다. 또한 목록에 동종 유형이없는 경우 다른 유형을 처리하는 방법을 알고 있어야합니다.

1

예 가능한 목표를 달성 할 수 있지만 void 포인터의 역 참조를 처리해야합니다. 내가 암시하는 것은 역 참조하는 동안 적절한 유형에 카스트 무효 포인터를 입력해야한다는 것입니다.