C指针,链接列表和节点

时间:2018-05-08 17:49:31

标签: c pointers struct linked-list nodes

我已经在这个代码上工作了几天,这就是我已经达到的目标(我之前已经问过)。代码点是打印给定字符串上每个字母的出现次数,仅更改letters()report()

我在printf添加了letters(),以便了解最新情况。我不太确定在函数letters()中是否需要第一个循环但它是打印整个输入字符串。另外,如果我不将第一个循环放在letters()中,那么在report()当前是NULL(为什么???)。 letters()中的第二个循环仅打印输入字符串的最后一个字母(同样为什么?)。并且report()再次只打印字符串的最后一个字母,而current->occurences打印一个随机的6位数字(可能是mem地址?),报告也一直持续,这意味着当前永远不会变为{{ 1}} ... 。我已经研究了好几天了,我无法理解为什么NULLletters()上的第二个循环不起作用,它们对我来说似乎是正确的。任何帮助表示赞赏...

report()

1 个答案:

答案 0 :(得分:0)

  

另外,如果我不把第一个循环放在letters()中,那么在report()中当前为NULL(为什么???)。

  • 它是NULL,因为你不做任何事情。你把它初始化为NULL,然后将它传递给一个函数,没有对它做任何事情,当它到达report()时它仍然是NULL。
  

letters()中的第二个循环只打印输入字符串的最后一个字母(同样为什么?)。

  • 它仅打印最后一个字母,因为在letters()的第一个循环中,您唯一要做的就是将newnode->ch分配给当前字母,当循环退出时,它将具有最后一封信。
  

而report()再次只打印字符串的最后一个字母,而current-> occurences会打印一个随机的6位数字(可能是mem地址?

  • report()打印一个随机数,因为您不知道是什么 在newnode->occurs中增加值之前的letters()值。
  

也报告永远,这意味着当前永远不会变成NULL ???

  • 它永远存在,因为当前总是指向自身(letters()中第一个循环中的逻辑被破坏。

此代码中有太多错误。我建议你坐下来阅读更多关于C指针的基础知识。