使用别名更改指针指向的值

时间:2013-08-28 01:47:53

标签: c pointers

假设我有以下功能:

Table * lookup_set(Table * t, char * key, ValueType value)
{
    int hash = lookup_hash(key);
    char * key_copy = strdup(key);
    Entry * bucket = t->table[hash];
    ...

然后再

    Entry * new = (Entry *) malloc(sizeof(Entry));
    new->key = key_copy;
    new->value = value;
    new->next = NULL;
    bucket = new;
    return t;
}

t-> table [hash]的值不会更改为new,即使我为bucket分配了新内容,我认为我设置为指向内存块t-> table [hash]指着。我做错了什么?

2 个答案:

答案 0 :(得分:2)

你可能想要的更像是:

Table * lookup_set(Table * t, char * key, ValueType value)
{
    int hash = lookup_hash(key);
    char * key_copy = strdup(key);
    Entry ** bucket = *t->table[hash];
        :
    Entry * new = (Entry *) malloc(sizeof(Entry));
    new->key = key_copy;
    new->value = value;
    new->next = *bucket;
    *bucket = new;
    return t;
}

bucket现在是指向指针的指针,允许您更改指针指针的值。如果要将bucket向下移动到链接列表,则需要使用

bucket = &(*bucket)->next;

答案 1 :(得分:0)

考虑让问题更容易理解:

你有

int bucket = X;

然后在

bucket = y;

然后在

return x;

明白了吗?

所以你需要一条线

t->table[hash] = new;

但要注意内存泄漏。