在C语言中,使用typedef来定义结构体时,后面是否带星号(*)表示的是类型定义的不同。具体来说,它决定了这个类型定义是指向结构体的指针还是结构体本身。
不带星号的情况
当你定义结构体时不带星号,如:
typedef struct Box{
int foxN;
int dogN;
} Box;
这里,Box被定义为了一个结构体类型,它包含了两个整型成员foxN和dogN。使用这个类型时,可以声明结构体变量,例如:
Box myBox;
这里,myBox是一个Box类型的变量,它可以直接访问其成员,如myBox.foxN或myBox.dogN。
带星号的情况
如果在typedef定义时加上了星号,如:
typedef struct Box{
int foxN;
int dogN;
} *Boxp;
这里,Boxp被定义为了一个指向struct Box的指针类型。这意味着使用Boxp类型时,实际上是在声明一个指向struct Box的指针,而不是结构体本身。例如:
Boxp myBoxPtr;
这里,myBoxPtr是一个Boxp类型的变量,即它是一个指向struct Box的指针。为了使用它,需要先让它指向一个有效的struct Box实例,例如:
Boxp myBoxPtr = malloc(sizeof(struct Box)); // 分配内存
if (myBoxPtr != NULL) {
myBoxPtr->foxN = 10; // 使用 -> 运算符访问成员
myBoxPtr->dogN = 20;
}
注意,由于Boxp是一个指针类型,不能直接通过.运算符来访问其成员,而应该使用->运算符。
不带星号的typedef定义了一个结构体类型,可以直接声明结构体变量并通过.运算符访问其成员。
带星号的typedef定义了一个指向结构体的指针类型,需要先分配内存(如使用malloc)来使其指向一个有效的结构体实例,然后通过->运算符访问其成员。