填充哈希表的函数

时间:2017-09-09 23:44:24

标签: c hashtable

对于家庭作业,我必须创建一个没有参数的函数,以便用NULL填充哈希表。 这是表的声明(我不能改变它),以及我如何调用该函数。

#include <stdio.h>
#include <stdlib.h>
#define MAX 10

int main()
{
  char* htab[MAX];
  htab = mkempty();
}

这是我创建的功能

#include <stdio.h>
#include <stdlib.h>
#define MAX 10

char* mkempty()
{
  char* ensemble[MAX];
  int i=0;
  for (i=0;i<MAX;i++) 
  {
    ensemble[i]=NULL; 
  }
  return ensemble;
}

当我编译它时,我得到了这个:

 error: assignment to expression with array type
  htab=mkempty();

我理解错误,但我不知道如何填写此表。

声明必须是:char* htab[MAX];,并且该函数没有任何参数。

3 个答案:

答案 0 :(得分:2)

鉴于表格:

char* htab[MAX];

将all设置为NULL的最佳方法是:

memset(htab, 0, sizeof(htab));

如果你需要在函数内部进行,你的函数必须将数组作为指针加上大小:

void mkempty(char** array, size_t count)
{
    memset(array, 0, count * sizeof(char*));
}

然后像这样调用:

mkempty(htab, MAX);

现在,有些人会告诉你&#34;归零&#34;指针不一定使其为NULL。这些学员是正确的:memset()的上述用法在技术上依赖于100%所有机器上可能不正确的东西。具体来说,它不适用于20到50年前制造的一些大型计算机。我认为你的作业不是从20世纪80年代开始在电脑上运行的。

答案 1 :(得分:0)

如果需要进行分配,可以使用指针并动态分配内存。没有参数

char **mkempty(void)
{
    return calloc(MAX, sizeof(char *));
}

并在主

char **htop;
htop = mkempty();

答案 2 :(得分:0)

所以我问我的老师,他不想要一个没有争论的功能,这是他给我的表上的一个错误

所以我的功能是:

void mkempty(char** htab[])
{
  int i=0;
  for (i=0 ; i < MAX ; i++){
    *htab[i]=NULL;
  }
}