将链表中的值添加到变量

adding values in linked list to a variable

我正在创建 C 程序,通过使用 while 循环遍历来将链表中节点中的值相加。

我编写了以下代码:

#include <stdio.h>

int main (void)
 {
   struct entry
      {
      int            value;
      struct entry   *next;
      };

   struct entry   n1, n2, n3;
   struct entry   *list_pointer = &n1;
   int sum;
   n1.value = 100;
   n1.next  = &n2;

   n2.value = 200;
   n2.next  = &n3;

   n3.value = 300;
   n3.next  = (struct entry *) 0;    // Mark list end with null pointer

   while ( list_pointer != (struct entry *) 0 ) {
        sum += list_pointer->value;
        list_pointer = list_pointer->next;
     }

  printf ("%i\n", sum);


 return 0;
}

但是我得到以下输出:

    33367

而不是将 600 作为输出

  int sum;

这里你要创建一个堆栈变量; C 标准没有说明它的值,实际上它会包含它现在存储的内存位置上的任何随机字节。有关这方面的更多信息,请参见此处:What happens to a declared, uninitialized variable in C? Does it have a value?

您应该明确地将其初始化为零:

  int sum = 0;

另一方面,绝对没有理由在 main 中定义 entry(通常您应该避免嵌套结构声明,除非您有充分的理由不这样做)。