第一种形式更好,因为您的代码更安全;你知道它ptr
要么包含一个有效的地址值,要么NULL
在它第一次使用之前。
ptr
如果您在为其分配有效地址之前不小心使用了第二种形式,那么您可能会遇到问题;如果没有明确的初始化程序,它的初始值是不确定的,如果你ptr
在分配给它之前不小心使用了,你的代码可能会也可能不会立即崩溃。
我几乎可以保证运行时性能或内存占用不会有可测量的差异,构建时间也不会有可测量的差异。
您应该始终在声明时初始化指针变量,并且 IMO 您应该推迟它们的声明,直到您真正需要它们。IOW,而不是写这样的东西:
void foo( void )
{
int *ptr = NULL;
/**
* several dozen lines of code
*/
ptr = malloc( sizeof *ptr * number_of_elements );
/**
* do stuff with ptr
*/
}
最好这样写:
void foo( void )
{
/**
* several dozen lines of code
*/
int *ptr = malloc( sizeof *ptr * number_of_elements );
/**
* do stuff with ptr
*/
}
当然,这只能从 C99 开始;如果您使用的是 C89 或更早版本的编译器,则所有声明都必须位于块中的任何可执行语句之前。
通常的尼特: