我正在努力制作一个符合条件的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
};
答案 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执行上述操作。