2017-04-08 1 views
0

46 및 53 줄에 캐스팅 오류가없는 정수에서 포인터가 할당되고, 양쪽에 두 개의 별표가있는 두 줄이 생겨서 내 삶에 대해 알아낼 수 없습니다. 왜. 링크 된 목록은 나에게 매우 새롭고, 나는 그들이 어떻게 완전하게 작동하는지 모른다.캐스팅 오류가없는 링크 된 목록 포인터

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

struct node_def 
{ 
    int data; 
    struct node_def *next; 
}; 
typedef struct node_def node; 

node *makeNode (int a); 
node *insertFront(node *head,node *new); 
void printList(node *head); 

int numNodes = 0; 

int main() 
{ 
    srand(time(0)); 
    int r = rand() % 10000; 
    int i = 0; 

    node *head = NULL; 
    node *tmp = NULL; 

    printf("How many nodes? ", numNodes); 
    scanf("%d", numNodes); 
    printf("\n"); 

    head = insertFront(head, tmp); 

    for(i = 0; i < numNodes; i++) 
    { 
     makeNode(r); 
     printList(head); 
    } 
    printf("\n"); 

    return 0; 
} 
node *makeNode (int a) 
{ 
    node *new = malloc(sizeof(node)); 
    **new = a;** 

    return new; 
} 
node *insertFront(node *head, node *new) 
{ 

    **new->data = head;** 
    new->next = new; 

    return 0; 
} 
void printList(node *head) 
{ 
    int j = 0; 
    for(j = 0; j < numNodes; ++j) 
    { 
     while (head != NULL) 
     { 
      printf(" %4d", head->data); 
      head = head->next; 
     } 
     if(j % 10 == 0) 
      printf("\n"); 
    } 
    return; 
} 

= 새 (A)는 새로운 노드를 만들고 0에서 그들에게 임의의 번호를 할당하기위한 것입니다 - 당신은 새에 연구를 할당하려고 9999

+1

힌트 : 어떤 유형이'a'입니까? 포인터입니까? 마찬가지로'head'는 어떤 타입입니까? 그것은 int인가요? –

+0

이 두 가지 주석 중 어느 것도 나에게 도움이되지 않습니다. 나는 변수의 위치를 ​​서로 바꾸거나, 별표와 앰퍼샌드를 다양하게 조합하는 대신 오류가 발생하지 않도록이 두 줄을 모두 만들 생각을했습니다. 아무 것도 작동하지 않습니다. 나는 이것보다 더 많은 방향이 필요하다. – Boo92

+0

'new = a;'->'if (new) {new-> data = a; new-> next = NULL; }' – BLUEPIXY

답변

0

하지만 새로운 구조체이다. struct에 대한 포인터를 만듭니다 : node * new 당신이 원하는 것은 int를 new-> data에 대입하는 것입니다.

node *insertFront(node *head, node *new) 
{ 
**new->data = head;** // ** is meaningless 
new->next = new; // new is a reserved key word, don't use it this way 
return 0; 
} 

당신이하려고하는 것은 NULL 포인터를 목록의 머리 부분으로 넣는 것입니다. makeNode 함수 내에서 요소를 푸시하십시오. 이 같은 삽입 :

void createNode(node *head) 
{ 
    Node *new_node = malloc(sizeof(Node*)); 
    new_node->data = rand() % 100000; 
    new_node->next = NULL; 
    if(head == NULL) 
     head = new_node; 
    else if(head != NULL) 
     //Here you have to adapt your list, search (linked list crud functions) 
} 

당신은 포인터가 무엇인지에 대한 잘못된 이해를 가지고있다. 희망이 도움이 됨