1. 基本解释
typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
2. typedef + struct 的问题
下述代码在编译时会报错。
typedef struct tagNode
{
char *pItem;
pNode pNext;
} *pNode;
问题分析:
这语句实际上完成两个操作:
1) 定义一个新的结构类型
分析:tagNode称为“tag”,即“标签”,实际上是一个临时名字,struct 关键字和tagNode一起,构成了这个结构类型,不论是否有typedef,这个结构都存在。
我们可以用struct tagMyStruct varName来定义变量,但要注意,使用tagMyStruct varName来定义变量是不对的,因为struct 和tagMyStruct合在一起才能表示一个结构类型。
2) typedef为这个新的结构起了一个名字,叫MyStruct。
typedef struct tagMyStruct MyStruct;
因此,MyStruct实际上相当于struct tagMyStruct,我们可以使用MyStruct varName来定义变量。
根据我们上面的阐述可以知道:新结构建立的过程中遇到了pNext域的声明,类型是pNode,要知道pNode表示的是类型的新名字,那么在类型本身还没有建立完成的时候,这个类型的新名字也还不存在,也就是说这个时候编译器根本不认识pNode。
解决这个问题的方法有多种:
1)、
typedef struct tagNode
{
char *pItem;
struct tagNode *pNext;
} *pNode;
2)、
typedef struct tagNode *pNode;
struct tagNode
{
char *pItem;
pNode pNext;
};
注意:在这个例子中,你用typedef给一个还未完全声明的类型起新名字。C语言编译器支持这种做法。
3)、规范做法:
struct tagNode
{
char *pItem;
struct tagNode *pNext;
};
typedef struct tagNode *pNode;
分享到:
相关推荐
在C/C++编程语言中,`typedef` 和 `struct` 是两种不同的声明结构体类型的方式,它们各有特点,但也有一定的关联。理解这两者之间的差异以及如何初始化结构体是编程中非常重要的概念。 首先,`struct` 关键字用于...
C_C++中typedef_struct和struct的用法 在 C/C++ 中,struct 和 typedef struct 是两个常用的数据类型定义方式,它们之间有着微妙的区别。本文将详细介绍 struct 和 typedef struct 的用法,并通过实例代码演示其...
"struct和typedef struct的区别" 在编程语言中,struct和typedef struct都是用来定义结构体类型的,但它们之间存在一些关键的区别。 首先,在C语言中,定义一个结构体类型需要使用typedef关键字,例如: ```c ...
c++笔记struct和typedef struct彻底明白了 在 C++ 编程语言中,struct 和 typedef struct 是两个非常重要的概念。今天,我们将深入探讨这两个概念的区别和使用方法。 首先,让我们从基本概念开始。struct 是一种...
typedef关键字不仅可以用于基本数据类型,还可以用于数组、指针以及更复杂的数据结构,比如结构体(struct)。本文将深入探讨typedef在C语言中的使用方法以及它的常见问题和解决方案。 首先,typedef定义新类型的最...
C/C++语法知识:typedef struct 用法详解 在 C/C++ 语言中,typedef struct 是一个非常重要的概念,它可以帮助我们定义新的数据类型,简化代码,并提高代码的可读性。在本文中,我们将详细解释 typedef struct 的...
当`struct`和`typedef`结合使用时,它们可以为结构体类型提供更方便的引用方式。 1. **`struct`定义结构体**: 在C/C++中,定义结构体的基本语法如下: ```c++ struct 结构体名 { 类型 变量名; 类型 变量名; ...
由于对typedef理解不够,因此从网上摘录了一些资料。比较详细和全面
CC中typedefstruct和struct的用法.doc
为什么要提出typedef的用法,因为相对于struct 结构体使用起来更方便。下面就是他们之间的对比: struct结构体 #include"stdio.h" struct Student { int sid; char name [100]; char sex; } int main(){ ...
在C++编程语言中,`typedef` 和 `struct` 是两个重要的关键字,它们分别用于定义新的数据类型和创建结构体。然而,当它们结合在一起使用,即`typedef struct`,时,它们的作用就有所不同,这正是`typedef struct`与`...
typedef struct StackNode { ElemType data //存放数据 struct StackNode * next //指向下一个结点 }StackNode typedef struct { StackNode * top // 栈顶指针 }LinkStack 实现下列操作: void ...
typedef 的主要作用是为一种数据类型定义一个新名字,这些数据类型包括内部数据类型(int、char 等)和自定义的数据类型(struct 等)。在编程中使用 typedef 的目的主要有两个:一是给变量一个易记且意义明确的新...
typedef struct pcb{ char name[N]; //进程名 char state; //状态 int arrivetime; //到达时间 int runtime; //估计运行时间 int etime; //周转时间 struct pcb *next; }PCB;
- C 语言中,声明结构体类型时需要 `typedef` 或者 `struct` 关键字,如 `typedef struct Student{...} Stu;` 或 `struct Student stu1;`。 - C++ 中,可以使用 `struct` 关键字直接声明结构体类型和变量,如 `...
typedef struct packed { bit [55:0] preamble; bit [7:0] SDF; bit [47:0] DA; bit [47:0] SA; bit [15:0] len; bit [511:0] payload; bit [31:0] FSC; } eth_frame; 在上面的代码中,我们定义了一个名为 ...
2. typedef可以用来定义struct的别名,但需要注意的是,在使用typedef定义struct时,需要明确地指出struct的类型。例如:typedef struct tagPOINT { int x; int y; }POINT; typedef和#define都是C/C++语言中的重要...
3. **数据结构的定义**:使用 `struct` 关键字定义了三个结构体,分别为命令结构 `a`、元素结构 `Element` 和队列节点结构 `QNode`。`a` 结构体用于存储命令状态(如 'E' 表示结束,'A' 表示进入,'D' 表示离开)、...