新运营商返回什么?

时间:2015-09-08 08:41:21

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

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

  char *name = new char[x];

这里为name命名了什么值,一个动态分配的地址或一个指向动态分配的char的指针? 感谢

6 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

Operator new将指针返回到数组的开头。

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

这就是为什么我们可以说:运营商new将地址返回到数组的开头。

抱歉我的英文。

答案 2 :(得分:0)

简而言之: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]访问数组的第二个元素。

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

表达式

new char[x]

分配一个char个对象数组,并将一个指针(类型为char*)返回到索引为零的对象。

如果您想动态分配指针,可以使用

new char*

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