【问题标题】:What does the new operator returns?new 运算符返回什么?
【发布时间】:2015-09-08 08:41:20
【问题描述】:

我是初学者,这个问题总是让我感到困惑。我的学术书籍说 new 运算符返回一个地址。但在很多教程中,我发现 new 返回一个指向特定地址的指针。拿这个:

  char *name = new char[x];

这里给name赋值的是什么值,是动态分配的地址还是指向动态分配的char的指针? 谢谢

【问题讨论】:

  • 请注意,“地址”和“指针”对 C 和 C++ 语言的含义相同,并且与内存位置地址的硬件概念无关编译器通常会实现它们。
  • 指针是能够存储地址的变量。 new 返回的地址存储在指针中。这就是为什么我们称它们为指针,因为它们指向一个地址。

标签: c++ new-operator dynamic-memory-allocation


【解决方案1】:

指针是一个包含另一个变量地址的变量。所以这两种说法大致相同。返回包含地址的指针。

当你说指针指向某个东西时,它意味着它包含它的地址。

【讨论】:

    【解决方案2】:

    运算符 new 返回一个 指针 指向数组的开头。

    指针是内存中某个单元格的地址。

    这就是为什么我们可以说:运算符 new 返回一个 地址 到数组的开头。


    对不起我的英语。

    【讨论】:

      【解决方案3】:

      简而言之:new 运算符返回分配对象的唯一地址。当您分配对象数组时,将返回第一个对象的地址。

      char *name = new char[x];
      // name is a char pointer that contains the address to the first char from your char array
      

      name[0] 访问数组的第一个元素。 name[1] 访问数组的第二个元素。

      【讨论】:

        【解决方案4】:

        数组形式的新表达式(如new char[x])的结果是一个指针(在本例中为char * 类型)。当使用运算符new 的数组形式时,该指针的值是动态分配数组的第一个元素的地址。当使用非数组形式(如new char)时,会分配一个对象,并且指针的值等于该对象的地址。

        语句char *name = new char[x]分配的变量name的值是表达式new char [x]给出的指针的值。

        如果在分配过程中发生错误,则 operator new 会抛出异常而不是返回值,并且变量 name 永远不会收到值。 [这可以通过使用其他形式的 operator new 来改变,它在错误时返回 NULL,并且不抛出,但你还没有这样做]。

        【讨论】:

          【解决方案5】:

          array-new 表达式new T[N] 的值是T 的大小为N 的动态分配数组的第一个元素的地址。该值的类型为T *,即该地址的指针类型。

          数组对象本身一般是不可寻址的,你一般不能命名完整的对象(事实上,你甚至不能说出它的类型)。您只能命名它的每个元素子对象,并且您只能通过其第一个元素的地址来销毁和释放数组对象。

          【讨论】:

            【解决方案6】:

            表达式

            new char[x]
            

            分配一个char对象数组,并返回一个指向索引0处对象的指针(char*类型)。

            如果你想动态分配一个指针,你会使用

            new char*
            

            动态分配char*类型的对象,并返回指向它的指针(char**类型)。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-03-24
              • 2023-03-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-08-23
              • 2021-04-28
              • 1970-01-01
              相关资源
              最近更新 更多