C使用指向结构的指针

时间:2018-05-23 23:18:35

标签: c

typedef struct llist {
    int valor;
    struct lligada *prox;
} *LInt;

所以这就是我大学在C中实现链表的方式,我一直想知道为什么在最后一行他们把指针放到了LInt而不只是LInt。

typedef struct lligada {
    int valor;
    struct lligada *prox;
} LInt;

这不会更简单吗?我的意思是这是我在网络教程中看到的最后一个例子,如果我们想要一个指向结构的指针,我们就会写出类似

的内容
LInt *foo = ...;

让我感到困惑的是,他们在结构中声明指针,在练习中他们仍然在上面声明。这有什么特别的原因吗?这是正常的吗?他们也为二叉树做这个。

1 个答案:

答案 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;