2017-07-31 40 views
-2

我想创建用于存储指针(即某个节点的存储位置)的散列表。创建散列表用于存储某些指针的值

为此,我制作了一个double数据类型的数组(因为double和pointer在我的系统上的大小相同)。我将地址存储到数组的元素中。但它给了我错误。

代码:

struct node* temp = head; 
int k = 0; 
while (temp->next) 
{ 
    addresses[k++] = (double)temp; // error is here. 
    temp = temp->next; 
} 

以下是错误:

addresses[k++] = (double)temp; 

我觉得应该类型转换的问题。错误信息是:pointer value used where a floating point value was expected

同样,当我要获取数组元素并将其存储在某个指向节点的指针时会出现错误。

因此,我应该如何创建存储指针的哈希表?

+3

这是错误的,使用'双'作为指针!它真的打破了*严格的别名*。如果你想在C中使用一个通用指针,那么我们就是'void *'。在C++中,你不需要创建一个哈希表,[因为它已经有一个](http://en.cppreference.com/w/cpp/container/unordered_map)。 –

+1

你真的想把'struct node *'转换成'double'吗? – DimChtz

+6

C(以及C++)对于这些需要将指针存储为整数类型的特殊情况具有'intptr_t'。至少这保证与指针具有相同的大小。 – stefaanv

回答

3

您不必指定指针。只需将“地址”指向节点结构的指针数组即可。这里的代码:

struct node* addresses[some_size]; 
struct node* temp = head; 
int k = 0; 
while (temp->next) 
{ 
    addresses[k++] = temp; //no typecasting 
    temp = temp->next; 
}