将链表中的值添加到变量中

时间:2015-11-15 15:11:38

标签: c list struct linked-list nodes

我正在创建C程序,通过遍历while循环来在Linked List中的节点中添加值。

我编写了以下代码:

#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作为输出

1 个答案:

答案 0 :(得分:4)

  int sum;

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

您应该将其显式初始化为零:

  int sum = 0;

另一方面,绝对没有理由在entry中定义main(通常你应该避免使用嵌套的struct声明,除非你有充分的理由不这样做。) / p>