C - ' typedef struct SymTable * SymTable_T;意思?

时间:2015-11-21 21:24:42

标签: c struct typedef abstract-data-type

我正在努力制作一个符合条件的ADT,我绝对是垃圾用指针。有人可以为我打破陈述typedef struct SymTable *SymTable_T;吗? typedef在做什么? *SymTable_T指向的是什么?

此外,对于奖励互联网积分,如果我需要我的SymTable复制<key, value>对,有人可以指出我正确的方向吗?我的猜测是这样的:

typedef struct SymTable *SymTable_T;
{
    char *key;
    int *value;
    struct SymTable *next; //I will have linked lists to avoid collisions
};

2 个答案:

答案 0 :(得分:3)

typedef struct SymTable *SymTable_T;如果表达如下,则会更容易理解:

typedef struct SymTable* SymTable_T;

因此,这是声明SymTable_T是指向struct SymTable的指针。

声明之后的东西是垃圾,我甚至认为它不应该编译。也许以下意思是:

struct SymTable
{
    char* key;
    int* value;
    struct SymTable* next; //I will have linked lists to avoid collisions
};

typedef struct SymTable* SymTable_T;

答案 1 :(得分:1)

typedef语句将指向结构类型的指针定义为新类型。

typedef struct SymTable *SymTable_T;之后

无论您在何处进行变量声明:

SymTable_T newTable;

等于做:

struct SymTable *newTable;

在最后的代码中,您可能正在尝试按照描述定义类型,但也声明结构类型为相同类型。

这没有做得对 - 事实上,你拥有它,就像只有一个代码块,只有你的typedef语句之后只有变量声明,这是有效但没有什么接近什么你想要的。

尝试指定您的类型:

struct SymTable
{
    char *key;
    int *value;
    struct SymTable *next; //I will have linked lists to avoid collisions
};

然后使用typedef执行上述操作。