我正在创建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 ("%in", sum);
return 0;
}
然而,我得到了以下输出:
33367
而不是将600作为输出
int sum;
在这里,您正在创建一个堆栈变量;C标准没有说明它的值,在实践中,它将包含存储它的内存位置上的任何随机字节。有关这方面的更多信息,请参阅此处:C中声明的、未初始化的变量会发生什么?它有价值吗?
您应该明确地将其初始化为零:
int sum = 0;
另一方面,绝对没有理由在main
中定义entry
(通常,除非有充分的理由不这样做,否则应该避免嵌套结构声明)。