在Charles Petzold第五版的《windows程序设计》中,看到这样一些代码:
#define DEVISIONS 5
staticBOOL fstate[DEVISIONS][DEVISIONS];
........
if(x<DEVISIONS && y<DEVISIONS)
fstate[x][y]=fstate[x][y]^1;
一开始看到觉得很诧异,fstate[DEVISIONS][DEVISIONS]没有初始化啊,那怎样进行fstate[x][y]=fstate[x][y]^1啊?
经过查阅和验证才知道,static定义的变量如果没有给他们初始化和赋初值,系统会默认为0或者“/0”的。
验证如下:
(在VC++6.0Z中)
#include<stdio.h>
#include<windows.h>
int main()
{
static BOOL fstare[5][5];
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
printf("%d ",fstare[i][j]);
printf("\n");
}
return 0;
}
结果如下:

后来又验证了字符的,不过什么都没有输出,就空出5行,所以字符默认是"/0".
若删除static则会出现的都是乱码:

所以,遇到问题不要害怕和烦恼,自己查阅,自己验证。
相信问题一定会解决的。