new datatype*[10] returns 如何指向指针?
How does new datatype*[10] returns a pointer to pointer?
我遇到了 C++ 中的 Hash Map 实现。 HashMap 的构造函数包含以下代码。 new HashEntry*[TABLE_SIZE]
行说的是什么。我以前从未见过这样的结构。它如何 return 指向指针的指针?
class HashMap {
private:
HashEntry **table;
public:
HashMap() {
table = new HashEntry*[TABLE_SIZE];
for (int i = 0; i < TABLE_SIZE; i++)
table[i] = NULL;
}
};
一个new
表达式总是return一个指针。根据 [expr.new],数组的 new
表达式产生,强调我的:
When the allocated object is an array (that is, the noptr-new-declarator syntax is used or the new-type-id or
type-id denotes an array type), the new-expression yields a pointer to the initial element (if any) of the array.
[ Note: both new int
and new int[10]
have type int*
and the type of new int[i][10]
is int (*)[10]
—end note ] The attribute-specifier-seq in a noptr-new-declarator appertains to the associated array type.
该行正在创建大小为 TABLE_SIZE
的 HashEntry*
的新数组。该表达式的 return 类型是指向初始元素的指针,其类型为 HashEntry*
。因此 HashEntry**
.
我遇到了 C++ 中的 Hash Map 实现。 HashMap 的构造函数包含以下代码。 new HashEntry*[TABLE_SIZE]
行说的是什么。我以前从未见过这样的结构。它如何 return 指向指针的指针?
class HashMap {
private:
HashEntry **table;
public:
HashMap() {
table = new HashEntry*[TABLE_SIZE];
for (int i = 0; i < TABLE_SIZE; i++)
table[i] = NULL;
}
};
一个new
表达式总是return一个指针。根据 [expr.new],数组的 new
表达式产生,强调我的:
When the allocated object is an array (that is, the noptr-new-declarator syntax is used or the new-type-id or type-id denotes an array type), the new-expression yields a pointer to the initial element (if any) of the array. [ Note: both
new int
andnew int[10]
have typeint*
and the type ofnew int[i][10]
isint (*)[10]
—end note ] The attribute-specifier-seq in a noptr-new-declarator appertains to the associated array type.
该行正在创建大小为 TABLE_SIZE
的 HashEntry*
的新数组。该表达式的 return 类型是指向初始元素的指针,其类型为 HashEntry*
。因此 HashEntry**
.