C++ 像这样使用新的操作员对吗?

C++ 像这样使用新的操作员对吗?,c++,new-operator,C++,New Operator,该行是否用于分配地址nir=0?0也是内存的一部分,对吗?我们为什么不把nir=NULL nir = 0; 我是否可以这样做并更改值,以便现在可以将输出设置为8?毕竟,我已经删除了*nir值。nir=0 这会将指针设置为NULL。0和NULL在此上下文中是相同的 *nir=8 这是错误的,因为nir不是有效的指针。它的崩溃并不奇怪 cout此代码段是错误的 *nir = 8; 通常程序会崩溃 至于线路 *nir=8; //**can i do like this and change

该行是否用于分配地址
nir=0
?0也是内存的一部分,对吗?我们为什么不把
nir=NULL

nir = 0;
我是否可以这样做并更改值,以便现在可以将输出设置为
8
?毕竟,我已经删除了
*nir
值。

nir=0

这会将指针设置为NULL。0和NULL在此上下文中是相同的

*nir=8

这是错误的,因为nir不是有效的指针。它的崩溃并不奇怪


cout此代码段是错误的

*nir = 8;
通常程序会崩溃

至于线路

*nir=8;    //**can i do like this and change the value, so that the output can be 8 now?
那么它就相当于

nir = 0;
< C++ >空定义为0或(长)0等。

根据C++标准

1空指针常量是带值的整数文本(2.14.2) 零或std::nullptr\t类型的PR值。可以使用空指针常量 转换为指针类型;结果是空指针值 属于该类型,可与对象的所有其他值区分开来 指针或函数指针类型


您标记C++,所以我建议使用NulLPTR而不是0 /null

nir=nullptr

问题

<>代码> 0(基本上是int类型)也用作C++中的空指针文字。这种混乱会导致歧义和错误。

解决方案

使用nullptr关键字而不是0来指示空指针值


您故意犯下的错误的简短分类:

nir = NULL;
因为程序员热衷于避免无用的工作,所以上面的(delete NULL)被定义为no op

    delete nir;
前两行是无用的,因为与任何其他函数相比,
nir
不再使用,并且每个标准的
main
返回0,除非它显式返回0

    nir = 0;
    return 0;

nir=0
使
nir
指向零。。这相当于将其设置为
null
。在这之后,您不能执行
*nir=8
,因为
nir
没有分配用于保存8的内存。您使用
delete
删除它
nir=0
nir=NULL
是完全一样的。@Jeffrey,这取决于
NULL
被定义为什么<代码> null 在C++中实际上不存在。好的,显然,这些标题的部分内容实际上是在C++标准(TIL;未检查)中指定的。在这种情况下,
NULL
在您的上下文中的含义还有待观察:)因为我已经使用了int*nir=new int,这是否意味着要产生输出8,我必须用其他名称分配另一个动态内存?@rockik我不确定您的意思。您必须再次分配,但可以使用相同的指针。您可以再次重用指针。
int main()
{
    int* nir = new int; // allocating dynamic memory
    *nir = 7; // assigning value
    cout << *nir << endl;
    delete nir; // deleting 
    nir = 0; // **is this line for assigning the address nir=0?
      // 0 is also part of memory right? Why didn't we put NULL?
    *nir = 8; // **can i do like this and change the value,
      // so that the output can be 8 now?
    cout << *nir << endl;
    delete nir;
    nir = 0;
    return 0;
}