首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么默认情况下指针不是用NULL初始化的?

为什么默认情况下指针不是用NULL初始化的?
EN

Stack Overflow用户
提问于 2009-12-16 06:19:52
回答 11查看 80.3K关注 0票数 125

有人能解释一下为什么指针没有初始化到NULL

示例:

代码语言:javascript
复制
  void test(){
     char *buf;
     if (!buf)
        // whatever
  }

程序不会单步执行if,因为buf不是null。

我想知道为什么,在什么情况下,我们需要一个带垃圾的变量,特别是指向内存中垃圾的指针?

EN

回答 11

Stack Overflow用户

发布于 2009-12-16 06:21:56

因为初始化需要时间。在C++中,您应该对任何变量做的第一件事就是显式地初始化它:

代码语言:javascript
复制
int * p = & some_int;

或者:

代码语言:javascript
复制
int * p = 0;

或者:

代码语言:javascript
复制
class A {
   public:
     A() : p( 0 ) {}  // initialise via constructor
   private:
     int * p;
};
票数 23
EN

Stack Overflow用户

发布于 2009-12-16 06:28:45

此外,我们确实有一个警告,当你搞砸它的时候:“在赋值之前可能使用”或类似的动词,这取决于你的编译器。

你编译的时候会有警告,对吧?

票数 8
EN

Stack Overflow用户

发布于 2009-12-16 06:28:11

在极少数情况下,变量被取消初始化是有意义的,而且默认初始化的成本很小,那么为什么要这样做呢?

C++不是C89。见鬼,连C都不是C89。您可以混合声明和代码,因此应该将声明推迟到有合适的值进行初始化时再进行声明。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1910832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档