我有两个文件,main.c和hash.c
在hash.c中,我只有一个空哈希表,称为hashtable
和一些函数(不是主要的)
在main.c中,我有main()函数和#include "hash.h"
我的问题是,如果在main.c中,我从hash.c调用一个函数,如:hash_add("strawberry", 3)
,它在hash.c的哈希表中添加一个带有元素的键(称为hashtable
),
然后,如果我在main.c中extern hash * hashtable
,我的3个草莓会在哈希表中吗?或者我的哈希表是空的吗?
(我认为当我打电话给hash_add("strawberry", 3)
时,只要我在函数范围内,我的3个草莓就在哈希表中)
谢谢
答案 0 :(得分:2)
在C中有两种方法可以做到这一点。听起来你正在使用全局变量,所以我先描述一下。更好的方法是使用局部变量,我会告诉你第二个:
使用全局变量,您可以执行以下操作:
// hash.h
void hash_add(const char* key, int value);
extern hash h;
// hash.c
hash h;
void hash_add(const char* key, int value) { ... }
// main.c
#include "hash.h"
int main()
{
hash_add("strawberry", 3);
// h will now have three strawberries
}
最好不要使用全局变量,因为您可以获得更少的名称冲突,并且您一次可以拥有多个哈希表。在这种情况下,您通常会持有一个指向哈希的指针,然后将其传递给哈希函数:
// hash.h
void hash_add(hash* h, const char* key, int value);
hash* hash_create();
void hash_destroy(hash* h);
// main.c
#include "hash.h"
int main()
{
hash* h = hash_create();
hash_add(h, "strawberry", 3);
// h will now have three strawberries
hash_destroy(h);
}