当数组在全局被定义时,它自然时默认会被初始化的。
但是当数组在某个函数体内被定义时,编译器会不会对它初始化呢?
我在VS中编程时,有一段这样的代码:
void CheckWin()
{
bool visited_1[N];
bool visited_2[N];
//----以下省略-------
}
今天写的是课程设计,HEX棋程序,想写一个基于深搜的获胜检测,检测如果还差一个子就胜的话就直接下,不再评估整个棋盘。但是写好以后,居然发现在对局时,botzone平台的输出与我本地运行的输出不相同,真是奇了!
后来经过重重debug,才发现,我的本地编译器会把函数体中定义的bool数组默认初始化为全true,而平台的编译器初始化是有的是true有的是false,这才导致相同程序不同结果。
教训:数组、变量初始化,要自己显式地去初始化,不要依赖编译器默认!