포인터 및 구조체의 응답을 얻기 위해 C의 연결된 목록 구현 작업을하고 있습니다. 여기링크 된 목록 구현의 구조 포인터
struct Node {
void *data;
struct Node *next;
};
struct List {
struct Node *head;
};
void initList(struct List *list) {
list->head = 0;
}
struct Node *addFront(struct List *list, void *data) {
struct Node *newNode;
newNode->data = data;
newNode->next = list->head;
list->head = newNode;
return newNode;
}
나는 int main()
기능에서 실행 테스트한다 : 여기 내 LL 데이터 구조에 대한 기본 코드는
int main() {
/* test addFront */
double *data1;
double *data2;
*data1 = 10.5;
*data2 = 10.7;
struct List *newList;
initList(newList);
addFront(newList, data1);
printf("%s\n", newList->head->data);
addFront(newList, data2);
printf("%s\n", newList->head->data);
return 0;
}
내 문제는 printf와 출력을 인쇄되지이다. % s가 데이터 유형 (double)과 일치하지 않기 때문에 현재는 그대로 인쇄됩니다. 문자열 형식을 % d (으)로 변경하면 세그먼트 오류가 발생합니다. double 형 캐스트를 추가하면 두 번째 인수에 double * 유형이 있다고 나와 있는데, 이는 ->
표기법이 포인터를 역 참조 한 것으로 생각하기 때문에 혼란 스럽습니다.
나는 분실했습니다.
좋습니다. 여전히 한 가지 문제는 printf 구문에서 역 참조 (dereferencing)입니다. 나는 -> 연산자가 이미 포인터로 구조체의 데이터를 역 참조했다. 아니면 구조체 자체를 역 참조하는 것입니까? 그렇다면 머리가 포인터가 아니기 때문에 머리 -> 데이터를 갖는 것이 잘못입니까? – user1427661
'head-> data'는'(* head) .data'를합니다. 그래서 당신은 헤드 포인터를 deref'ed하고 당신의 손에'void * data'를 가지고 있습니다 (그러나'double'은 아닙니다). –
수정 된 코드를 실행 했습니까? 그것은 내 컴퓨터에서 완벽하게 실행됩니다. –