C:设置指向 nullptr 的指针和将其初始化为新变量类型之间的区别

新手上路,请多包涵

我正在学习 C++,我知道“新”关键字用于将内存中的地址分配给指针。而且我认为在使用“nullptr”时会初始化一个指向任何内容的指针。那是对的吗?参考示例:

 //using nullptr
int *x = nullptr; //this is just a pointer that points to nothing and
                  //will need to be initialized with an address before it
                  //it can be used. Correct?

//using new
int *x = new int; //this is basically giving x an address in memory. Will the
                  //address have some residual value stored in it or will
                  //it contain zero?

您什么时候会使用其中一种? new 仅用于动态内存分配还是有其他应用程序?如果您可以声明一个指向 nullptr 的指针,然后稍后再对其进行初始化,为什么还要初始化它呢?

谢谢您的帮助!

原文由 Adam Halfaker 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 455
1 个回答

您对 new intint *x = new int; 的理解不正确(或者至少,您的措辞不正确)。

new int 分配一些内存。它不会“为指针分配内存”,它只是分配内存。它提供了一个指向该内存的指针,该内存以前不存在。

int *x; 还为名为 x 的变量分配内存。 x 是一个变量,其值为另一个对象的地址。 (与其他类型的变量相反,例如,其值可能是数字或字符串)。

int *x = nullptr; 表示 x 持有一个称为“空指针”的特殊值,它不表示任何其他对象。

int *x = new int 表示 x 持有的是 new int 分配的那块内存的地址。所以这一行涉及两个分配: x ,以及由 new 分配的未命名内存。

在后一种情况下,您可以分别输出每个分配的地址,例如:

 cout << &x << ',' << x << '\n';

原文由 M.M 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏