首页 > 解决方案 > 在 main() 中创建的结构变量的范围和用户定义的函数?

问题描述

typedef struct node {
   int data;
   struct node *next;
} Node;
    
void checkEmpty(Node *list) {
  printf(list == NULL ? "true" : "false");
}

第一次,我创建了这个main()函数,list直接在里面做了一个,然后调用checkEmpty(). 它打印了true

int main() {
    Node *list;
    checkEmpty(list); // it return true
    return 0;
}

然后,我创建了一个新函数menu(),在其中创建了一个list,然后调用了checkEmpty(). 它打印了false

void menu() {
    Node *list;
    checkEmpty(list);
}

int main() {
    menu(); // it return false
    return 0;
}  

为什么会这样?

标签: c

解决方案


函数内部的声明Node *list不会初始化list。它的值是不确定的,这意味着它不必表现得好像它有任何固定值。编译器可能会在每次使用时生成使用不同值的代码,例如有时从内存读取或在另一种情况下使用处理器寄存器中的值。

要修复您的程序,请使用或给出list初始值。Node *list = 0;Node *list = NULL

还要打开编译器警告并将警告提升为错误。检查您的编译器文档以获取执行此操作的开关。还要注意编译器警告和错误消息。


推荐阅读