正在将链式哈希 table 初始化为 NULL。出现 "lvalue required as left operand of assignment" 错误。为什么?这是我的代码:

Initializing chained hash table to NULL. Get "lvalue required as left operand of assignment" error. Why? Here is my code:

我正在尝试创建链式哈希 table。我已经开始构建一个动态数组,现在正试图将每个数组指针初始化为 NULL。但是我收到错误 "lvalue required as left operand of assignment"。为什么?这是我的代码:

#include <iostream>         // for i/o functions

using namespace std;

const int HTSIZE = 997;     //size of the hash table

struct CHTNode
{
    int value;
    CHTNode *next;
};

void InitializeTable(CHTNode* &cHT);

int main()
{
    CHTNode *chainedHT;
    chainedHT = new(nothrow) CHTNode[HTSIZE];
    if (chainedHT == NULL)
    {
        cout << "ERROR: Memory allocation error"
             << endl;
        return 1;
    } //end if
    else
    {
        InitializeTable(chainedHT);
    }
}

void InitializeTable(CHTNode* &cHT)
{
    for (int i = 0; i < HTSIZE; i++)
        &cHT[i] = NULL;                     //ERROR FOR THIS LINE
}

运算符的地址 & returns 给定表达式的地址,因此 &cHT[i] 求值为 的 地址 i cHT 的第一个元素。 似乎 你正试图分配给变量 cHT[i],但你现在正在做的是试图分配给 cHT[i] 的地址值,这比尝试分配给常量更有意义。

您没有指针数组。您分配了 CHTNode 类型的对象数组。

您可以在分配数组时对其进行值初始化。例如

chainedHT = new(nothrow) CHTNode[HTSIZE] {};

如果您想编写一个单独的函数对数组的每个元素进行零初始化,那么该函数可以声明为

void InitializeTable( CHTNode* cHT, int n );

并定义为

void InitializeTable( CHTNode* cHT, int n )
{
    for ( int i = 0; i < n; i++ ) cHT[i] = {};
}

至于错误的说法

&cHT[i] = NULL; 

那就没意义了。表达式 &cHT[i] 是您尝试分配的临时对象。