typedef struct llist {
int valor;
struct lligada *prox;
} *LInt;
所以这就是我大学在C中实现链表的方式,我一直想知道为什么在最后一行他们把指针放到了LInt而不只是LInt。
typedef struct lligada {
int valor;
struct lligada *prox;
} LInt;
这不会更简单吗?我的意思是这是我在网络教程中看到的最后一个例子,如果我们想要一个指向结构的指针,我们就会写出类似
的内容LInt *foo = ...;
让我感到困惑的是,他们在结构中声明指针,在练习中他们仍然在上面声明。这有什么特别的原因吗?这是正常的吗?他们也为二叉树做这个。
答案 0 :(得分:1)
typedef struct llist {
int valor;
struct lligada *prox;
} *LInt;
使LInt
等同于struct llist*
(包括星标)。
在所有现代资源中都非常不鼓励使用typedefing指针
在C上我遇到了它,但它已被用于历史,特别是lcc编译器
经常使用这种做法(它们的约定也大写了指针类型定义的名称)。
typedefing指针的问题在于它可能令人困惑 你可以通过它们突然传递0(作为NULL),但是如果你 有一个命名约定(如大写每个指针typedef)然后 这颗恒星实际上并没有隐藏,只是表达为一个大写字母, 虽然它可能仍然让你的代码库以外的人感到困惑。
总结一下,用
typedef struct llist {
int valor;
struct lligada *prox;
} *LInt;
然后你会这样使用它:
LInt foo = NULL;
虽然没有typedef中的星号,但上面会是:
LInt *foo = NULL;