————————
接上一条,变量一定要被初始化再使用。C/C++编译器在这个方面不会像JAVA一样帮你初始化,这一切都需要你自己来,如果你使用了没有初始化的变量,结果未知。好的程序员从来都会在使用变量前初始化变量的。如:
1) 对malloc分配的内存进行memset清零操作。(可以使用calloc分配一块全零的内存)
2) 对一些栈上分配的struct或数组进行初始化。(最好也是清零)
不过话又说回来了,初始化也会造成系统运行时间有一定的开销,所以,也不要对所有的变量做初始化,这个也没有意义。好的程序员知道哪些变量需要初始化,哪些则不需要。如:以下这种情况,则不需要。
char *pstr; /* 一个字符串 */
pstr = ( char* ) malloc( 50 );
if ( pstr == NULL ) exit(0);
strcpy( pstr, "Hello Wrold" );
但如果是下面一种情况,最好进行内存初始化。(指针是一个危险的东西,一定要初始化)
char **pstr; /* 一个字符串数组 */
pstr = ( char** ) malloc( 50 );
if ( pstr == NULL ) exit(0);
/* 让数组中的指针都指向NULL */
memset( pstr, 0, 50*sizeof(char*) );
而对于全局变量,和静态变量,一定要声明时就初始化。因为你不知道它第一次会在哪里被使用。所以使用前初始这些变量是比较不现实的,一定要在声明时就初始化它们。如:
Links *plnk = NULL; /* 对于全局变量plnk初始化为NULL */