結構指針數組是否自動指向NULL /未被初始化?我認爲不是,但它似乎在以這種方式在下面的代碼行操作:自動指向NULL的結構指針數組?
for (np = hashtab[hash(s)]; np != NULL; np = np->next)
NP是一個結構指針,s是一個字符串。
當循環開始時,hashtab[]
中的元素都沒有被初始化。每次運行程序時,循環都會立即終止,因爲hashtab[]
包含NULL
完整代碼如下。
struct nlist { /* table entry: */
struct nlist *next; /* next entry in chain */
char *name; /* defined name */
char *defn; /* replacement text */
};
unsigned hash(char *s)
{
unsigned hashval;
for (hashval = 0; *s != '\0'; s++)
hashval = *s + 31 * hashval;
return hashval % HASHSIZE;
}
/* lookup: look for s in hashtab */
struct nlist *lookup(char *s)
{
struct nlist *np;
for (np = hashtab[hash(s)]; np != NULL; np = np->next)
if (strcmp(s, np->name) == 0)
return np; /* found */
return NULL; /* not found */
}
'hashtab'是如何定義的? – 2014-09-25 18:52:54