C 在链表的开头插入元素在函数中起作用,但从函数返回时,起始点为空

C 在链表的开头插入元素在函数中起作用,但从函数返回时,起始点为空,c,C,我尝试使用此函数在空链表的开头插入: void push(Node* node_to_insert, searchQueue* queue) { searchQueue* elem_to_insert = (searchQueue*)malloc(sizeof(searchQueue)); elem_to_insert->node = node_to_insert; if(queue_size == 0) elem_to_insert->nex

我尝试使用此函数在空链表的开头插入:

void push(Node* node_to_insert, searchQueue* queue)
{
    searchQueue* elem_to_insert = (searchQueue*)malloc(sizeof(searchQueue));
    elem_to_insert->node = node_to_insert;
    if(queue_size == 0)
        elem_to_insert->next = NULL;
    else
        elem_to_insert->next = queue;
    queue = elem_to_insert;
    queue_size++;
} 
searchQueue* queue = (searchQueue*)malloc(sizeof(searchQueue));
push(start_node, queue);
在函数执行期间,一切都按预期工作,但返回时,指向列表开头的指针为空

这是我用来调用函数的代码:

void push(Node* node_to_insert, searchQueue* queue)
{
    searchQueue* elem_to_insert = (searchQueue*)malloc(sizeof(searchQueue));
    elem_to_insert->node = node_to_insert;
    if(queue_size == 0)
        elem_to_insert->next = NULL;
    else
        elem_to_insert->next = queue;
    queue = elem_to_insert;
    queue_size++;
} 
searchQueue* queue = (searchQueue*)malloc(sizeof(searchQueue));
push(start_node, queue);

我还尝试在初始化列表时不分配内存,但仍然得到相同的结果。

您正在
推送中更改指针的本地副本。这不会更改调用函数中指针的值

我建议将
push
的返回类型更改为
searchQueue*
并返回新指针

searchQueue* push(Node* node_to_insert, searchQueue* queue)
{
  searchQueue* elem_to_insert = (searchQueue*)malloc(sizeof(searchQueue));
  elem_to_insert->node = node_to_insert;
  if(queue_size == 0)
    elem_to_insert->next = NULL;
  else
    elem_to_insert->next = queue;
  queue = elem_to_insert;
  queue_size++;

  return element_to_insert;
} 
在调用函数中,使用:

 queue = push(start_node, queue);

队列中=元素插入您正在覆盖作为函数参数传递的变量的本地副本。