我正在创建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作为输出
答案 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>