我是初学者,这个问题总是让我感到困惑。我的学术书说新操作员返回一个地址。但在许多教程中,我发现new返回指向特定地址的指针。拿这个:
char *name = new char[x];
这里为name命名了什么值,一个动态分配的地址或一个指向动态分配的char的指针? 感谢
答案 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**
)。