以链表为例:
知识点1
C语言:
struct Node {
int data;
struct Node* next;//必须加struct
};
C++:
struct Node {
int data;
Node* next;
};
在C语言中,当定义一个结构体内部的指针类型时,使用struct关键字来指定指针的类型是必需的。这是因为在C语言中,编译器需要知道指针指向的是一个结构体,而不是一个普通的数据类型。因此,在struct Node内部的指针类型声明中,需要使用struct关键字来指定指针所指向的类型。
在C++语言中,结构体的定义不需要使用struct关键字来引用结构体内部的类型。这是因为C++对结构体进行了一些扩展,使得结构体内部的类型可以直接使用,无需添加额外的关键字。但是,在C语言中,必须使用struct关键字来引用结构体内部的类型。
知识点2 typedef的使用
typedef是给已知的类型起别名,包括内置类型和自定义的数据类型如struct。
在C语言中,
struct Node {
int data;
struct Node* next;//必须加struct
};
struct和Node一起写才表示一个结构体类型,因此使用“Node 变量名”
是不正确的,要使用“struct Node 变量名”
才正确。因此我们便能理解typedef在struct中的使用方法:
typedef struct Node {
int data;
struct Node* next;//必须加struct
}LinkNode;
这里完成了两件事,一个是定义了一个结构体类型;一个是完成了以下操作typedef struct Node LinkNode;
因此之后就可以只使用LinkNode 变量名
定义结构体变量。
而在C++中,
可以直接使用“Node 变量名”
定义变量,而不需要在变量名前添加struct关键字。这是因为C++对结构体进行了一些扩展,允许直接使用结构体名作为类型。
C语言中可以选择不使用typedef,则定义变量时格式为
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));