我无法理解这个哈希程序的这个功能..帮帮我解释一下?

时间:2013-11-19 03:55:54

标签: c

好吧这是我讲师提供的哈希程序的功能之一。它有很多我以前从未尝试过的命令,比如strdup,hash等。从我的角度来看,这个功能用于在主程序中将列添加到散列(散列就像表正确吗?)那里重复使用此函数5次,因为有5个表描述...所以这里' s功能:

int install (char *name, char *desc){
unsigned int hi;
node *np;
if((np=lookup(name))==NULL){
    hi=hash(name);
    np=(node*)malloc(sizeof(node));

    if (np==NULL){
        return 0;
    }
    np ->name = m_strdup(name);

    if (np->name == NULL){
        return 0;
    }
    np -> next=hashtab[hi];
    hashtab[hi]=np;
}
else{
    free (np->desc);
}
np -> desc=m_strdup(desc);

if (np->desc == NULL){
    return 0;
}
return 1;

}

为什么会有这么多的回报?如果函数返回0,则表示函数没有成功地执行它应该正确的操作?如果它已经返回0,那么该函数是否有可能返回1?好吧,我完全没有这个...谢谢你的帮助:D

1 个答案:

答案 0 :(得分:0)

如果出现错误,写入的函数将返回0,否则返回1。这是一个相当普遍的但绝不是普遍的习语。

关于多个return语句,只有其中一个将被执行以执行对该函数的特定调用,因为返回的作用是停止执行当前函数并返回(即 return )给调用者。对同一函数的不同调用可以在代码中采用不同的路径,因此命中不同的返回语句,但任何单个调用只会返回一个返回。

在方法中使用多个return语句是一个经常争论的样式问题。它可以说使代码更简单,更难阅读,具体取决于它是如何完成的。见this question& this question对此有一些看法。