关于static 定义的对象系统默认初始值

       在Charles Petzold第五版的《windows程序设计》中,看到这样一些代码:

                        #define DEVISIONS 5

                       static BOOL fstate[DEVISIONS][DEVISIONS];

                       ........

                       if(x                                      fstate[x][y]=fstate[x][y]^1;

       一开始看到觉得很诧异,fstate[DEVISIONS][DEVISIONS]没有初始化啊,那怎样进行fstate[x][y]=fstate[x][y]^1啊?

     经过查阅和验证才知道,static定义的变量如果没有给他们初始化和赋初值,系统会默认为0或者“/0”的。

   验证如下: 

 

(在VC++6.0Z中)

#include
#include

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则会出现的都是乱码:

 

所以,遇到问题不要害怕和烦恼,自己查阅,自己验证。

相信问题一定会解决的。

你可能感兴趣的:(windows编程SDK)