C 没有强制转换错误的链表指针

C 没有强制转换错误的链表指针,c,linked-list,compiler-warnings,C,Linked List,Compiler Warnings,我得到的赋值是从整数中生成指针,在第46行和第53行没有强制转换错误,这两行两边都有双星号,在我的一生中,我不知道为什么。链表对我来说是非常新的,我还不知道它们是如何工作的 #include <stdio.h> #include <stdlib.h> #include <time.h> struct node_def { int data; struct node_def *next; }; typedef struct node_def n

我得到的赋值是从整数中生成指针,在第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;
}
#包括
#包括
#包括
结构节点定义
{
int数据;
结构节点_def*next;
};
类型定义结构节点\定义节点;
node*makeNode(inta);
节点*插入前端(节点*头部,节点*新);
作废打印列表(节点*头);
整数节点=0;
int main()
{
srand(时间(0));
int r=rand()%10000;
int i=0;
node*head=NULL;
node*tmp=NULL;
printf(“有多少个节点?”,节点);
扫描电镜(“%d”,珠心);
printf(“\n”);
头部=插入式前部(头部,tmp);
对于(i=0;i数据=头部**
新建->下一步=新建;
返回0;
}
无效打印列表(节点*头)
{
int j=0;
对于(j=0;j数据);
头部=头部->下一步;
}
如果(j%10==0)
printf(“\n”);
}
返回;
}

new=a意味着创建新节点并为它们分配一个0-9999之间的随机数。

您尝试将r分配给new,但new是一个结构。 将指针设为struct:node*new 您要做的是将r分配给new->data,这是一个int

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;
}
您尝试做的是将空指针作为列表的开头。 只需在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)
}
你对指针是什么理解不好。
希望对兄弟有所帮助提示:a是什么类型的?是指针吗?同样,头是什么类型的?这是一个
int
?这两个注释都没有帮助我,我已经尽了我所能让这两行不再给我错误,从互相切换变量的位置,各种星号和符号组合,都没有任何效果。我需要更多的指导。
new=a-->
if(new){new->data=a;new->next=NULL;}