typedef后别名和带*关键字用法与区别

在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)来使其指向一个有效的结构体实例,然后通过->运算符访问其成员。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值