C typedef究竟声明了什么?

C typedef究竟声明了什么?,c,typedef,C,Typedef,在上面的代码中,我对定义的内容有点困惑。 我理解typedef的功能,但我仍然想知道typedef node*link到底定义了什么是否定义指向节点的指针?对于typedef link*堆栈,我也有同样的问题类型定义行没有创建任何内容typedef用于为类型指定新名称,它们不是变量的声明或定义,因此此时实际上没有创建任何内容 typedef struct nodetype node; typedef node *link; struct nodetype { int dat; link

在上面的代码中,我对定义的内容有点困惑。
我理解
typedef
的功能,但我仍然想知道
typedef node*link到底定义了什么是否定义指向节点的指针?对于
typedef link*堆栈,我也有同样的问题

类型定义行没有创建任何内容
typedef
用于为类型指定新名称,它们不是变量的声明或定义,因此此时实际上没有创建任何内容

typedef struct nodetype node;
typedef node *link;

struct nodetype
{
 int  dat;
 link ptr;
};


typedef link *stack;
表示
链接
是类型
节点*
的另一个名称。只有当您像这样使用它时:

typedef node *link;

创建类型为
link
(与
node*
相同)的变量。

typedef
为给定类型定义别名。

它的优点是赋予代码元素一些特殊的含义

节点
是类型
结构节点类型
的别名
link
是类型
节点*
的别名,这意味着它也是类型
struct节点类型*
的别名

stack
是类型为
link*
的对象,与类型
node**
相同,与类型
struct nodetype**
相同


这是一个关于如何使用typedefs的可怕示例,正是因为它给您带来了混乱。它无缘无故地为同一事物创建了一堆不同的名称,并且它在typedef名称中隐藏了一个指针,而typedef名称几乎总是不好的jujuju。

“它是创建指向节点的指针还是创建指向节点的结构指针”-你有什么“结构指针”概念,它与常规指针有何不同?通常,当人们说“结构指针”时,他们只是指指向类型为结构类型的指针,因此“指向节点的指针”和“指向节点的结构指针”之间的唯一区别是术语冗余。听起来你好像不太懂
typedef
。这为现有类型提供了一个新名称,语法与声明变量相同;除了添加关键字
typedef
意味着标识符是该类型的别名,而不是该类型的变量。我问错了问题。我想我应该花更多的时间考虑该问什么,这是我的错。然而,我确实理解现在发生的事情。Thanks@ThoAppelsin不,他们不是
node*
link
是完全相同的类型。@ThoAppelsin:No,
typedef
只是为现有类型创建了一个新名称。@Tho您在这里大错特错了。同样,
typedef
声明别名,不定义或创建新类型。@ThoAppelsin:“A
typedef
声明不引入新类型,只引入指定类型的同义词。”这是ISO C标准的引用。您创建了一个新名称。你还没有创造一个人。没有新人,就像没有新人一样。
link link_varialbe;