【问题标题】:How do I store a pointer (node) returned by a function to my main?如何将函数返回的指针(节点)存储到我的 main 中?
【发布时间】:2015-01-07 07:15:37
【问题描述】:

我目前完成了反转链表的功能,但是当我返回一个指向新链表头部的指针时,我收到了错误,因为我将它错误地存储在我的主链表中。有人可以向我解释存储和打印新链接列表的正确语法吗?

typedef struct Node {
   int val;
   struct Node * next;
}LL_t;

LL_t reverse(LL_t* ls) // passing me a head
{

   \\ my code

   return ls; // pretty sure this is how I return the new head node 
}

int main() {

 \\ my code

   LL_t *p = reverse(head); // not working, giving me these weird incompatible errors.

   for ( i = 0; i < 9; i++ )
   {
         printf( "*(p + %d) : %d\n", i, *(p + i));
   }
   return 0;   
}

这是我更改变量指针 p 并尝试打印它后的最后一个错误

int *p; p = 反向(头部)

错误;

main.c:42:6: 警告:来自不兼容指针类型的赋值 [默认启用] p = 反向(头部);

编辑2:

我尝试了这种方法,但对我不起作用:

   for (p->val != NULL)
   {
        printf("%d\n", p->val);
        p->val = p->next;
   }

【问题讨论】:

  • 您能告诉我们错误是什么吗?还有head 来自哪里?
  • 让我截图。
  • 是的,抱歉我无法上传,说图片太大,
  • 复制粘贴。不要截图。
  • "我收到错误" 如果您认为它们相关,请显示它们。如果您认为它们不是,请不要提及它们。 “让我截图”。别。使用文本。您的编译器输出文本,而不是图片。

标签: c linked-list


【解决方案1】:
LL_t reverse(LL_t* ls) { }

接受一个指针,但返回一个结构。你需要:

LL_t *reverse(LL_t* ls) { }

【讨论】:

  • 谢谢,如何修复prinf 语句?它一直说它需要一个整数,但我给它一个 LL-t。我以某种方式修复了它,但现在当我将 p 更改为 int *p 时它会给我一个警告
  • @BeginnerC printf 无法打印 LL_t。也许您想打印val 成员,在这种情况下您将使用p-&gt;val。接下来你需要做的是使用 p-&gt;next 成员而不是从 0 到 9 循环遍历链表(你不能用 i 变量索引链表)
  • 这里有两个问题。 *(p + i) 表示“一些 LL_t 结构数组的 ith 元素”。也就是说,它是一个结构,并且不存在我可以看到的这样的数组。你想打印什么?
  • 我的新反向链表的元素。
  • 我用我尝试过的方法更新了我的帖子,但效果不佳。
【解决方案2】:

您遇到问题的原因是因为您的函数设置为返回 LL_t 节点,而不是指向它的指针。通过修复函数声明,您不应该面临任何其他错误(至少来自提供的代码):

LL_t* reverse(LL_t* ls) { ...

【讨论】:

  • 如何修复 printf 语句的错误?我似乎已经通过 switchig p 到 int *p 让它工作了,但我最终得到了一个关于不兼容类型的警告。
猜你喜欢
  • 1970-01-01
  • 2015-07-18
  • 2019-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-08
相关资源
最近更新 更多