C语言中结构体指针

4
typedef struct st {
    double d ;
    struct st *n ;
} st, *List ;

在这部分中:
} st, *List ;

这个第二个 "st" 是什么?它是一个创建的对象吗(为什么它和类型名称相同)?我不理解 "*List"。它使用 typedef 来说明 "List" 是指向 "st" 的指针吗? 谢谢。

我花了不到一分钟就找到了你的答案,因为这个问题与这个链接中的问题是一样的:https://dev59.com/zHI_5IYBdhLWcg3wEOrq。下次在发布问题之前,请先搜索一下谷歌。 - Luc DUZAN
4个回答

4

这部分内容

typedef struct st {...} st;

创建一个名为st的新符号,可以用来声明struct st的实例而无需使用关键字struct。您可以阅读此文章获取更多信息 - 文章中有一些示例。

第二个声明*List创建了一个指向struct st的指针类型,因此您可以声明指向该结构的指针,而不必写struct st*

typedef本质上创建了一个别名,可以代替原始类型。


2

typedef关键字可以定义多个类型别名。例如,你可以这样做:

typedef int Number, *NumberPtr;

这段代码定义了Number作为int的别名,NumberPtr作为int*的别名。
你的声明与此相同,只是使用了struct st代替了int。换句话说,它定义了两个类型名称 - st表示struct stList表示struct st*
这样可以写成:
st s;
List p;

替代

struct st s;
struct st *p;

2

第一个ststruct st的一部分,创建了一个有名字的结构体。第二个sttypedef … st的一部分,创建了一个类型作为struct st的别名。* List创建了一个类型List,作为指向struct st的指针。


1

这个代码有三个作用:第一个是定义了一个名为 struct st 的结构体,其中包含一个双精度浮点数和指向另一个 struct st 的指针。这个任务本身也可以像下面这样完成:

struct st {
    double d ;
    struct st *n ;
};
< p > typedef做了两件事情。它将st定义为struct st,并且将List定义为struct st *。一个更简单的这种2x typedef的示例是:

typedef int Integer, *PointerToInteger;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接