新运算符返回什么?

问题描述 投票:0回答:6

我是初学者,这个问题总是让我困惑。我的学术书籍说

new
运算符返回一个地址。但在很多教程中,我发现
new
返回一个指向特定地址的指针。拿这个:

  char *name = new char[x];

这里给

name
赋的是什么值,是已经动态分配的地址还是指向动态分配的指针
char

c++ new-operator dynamic-memory-allocation
6个回答
5
投票

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

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


1
投票

operator new 返回一个指向数组开头的pointer

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

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


对不起我的英语。


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


0
投票

数组形式的 new 表达式(如

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

语句

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

如果在分配过程中发生错误,则operator new会抛出异常而不是返回值,并且变量

name
永远不会收到值。 [这可以通过使用运算符 new 的替代形式来更改,该运算符在错误时返回
NULL
,并且不会抛出异常,但您还没有这样做]。


0
投票

数组新表达式

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

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


0
投票

表情

new char[x]

分配

char
对象的数组,并返回指向索引零处的对象的指针(类型为
char*
)。

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

new char*

动态分配

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

© www.soinside.com 2019 - 2024. All rights reserved.