【发布时间】:2016-02-20 20:27:03
【问题描述】:
我正在编写一个程序,它试图在 C 中实现哈希表。它必须使用指向指针的指针作为结构数据类型中的属性。这是相关结构的代码。
struct node {
char * data;
struct node * next;
};
struct hashtable {
int size;
struct node ** table;
};
问题的第一部分:
我一直在做大量的研究来弄清楚指针的指针是如何工作的,但我似乎仍然无法理解它。我发现的每个示例都为第一个和第二个指针分配了两个不同的指针名称。例如
x = 5;
*p = &x;
**q = &p;
“struct node ** table;”上面的情况呢? 在这种情况下,** table 是否与 **q 相同? 在这种情况下 q 、 *q 和 **q 的值是多少?是 q = 5 然后 *q 和 **q 通过地址返回还是 **q = 5 并且 *q 和 q 存储地址?
问题的第二部分:
如何访问指向另一个函数中的指针的指针?这是我现在拥有的代码。
struct hashtable * hashtable_new(int size){
struct hashtable *newTable;
if ( size < 1 )
{
return NULL;
printf("Its returning Null.");
}
else
{
newTable = malloc(sizeof(struct hashtable));
newTable -> size = size;
newTable -> table = malloc(sizeof(struct node) * size);
int i;
for (i = 0; i < size; i++ )
{
newTable -> table[i] = NULL;
}
fprintf(stderr, "Table has been created.");
return newTable;
}
};
我不确定我是否理解如何通过 -> 符号访问指针或指向指针的指针。是“newtable -> table”还是“newtable -> -> table”?
该表的目的本质上是一个 2d 表,其中列表主要是 1D 并且可以扩展到 2D 以处理散列中的冲突。
尾注:
希望我已经提供了足够的信息,以便在提出这个问题时理解上下文。这是我第一次在 stackoverflow 上提问,所以请随时问我额外的问题,提供 CC 或标记我在问这个问题时犯的任何错误。
谢谢!
【问题讨论】:
标签: c arrays function pointers memory