关于typdef和struct的混和定义式

博客针对网友关于C语言中typedef和struct的提问进行总结。介绍了typedef和struct是不同定义式,还列举三种具体情况,包括只需一个实体时的定义、简化写法及结构体中有自身类型成员时的处理,说明了编译器对不同写法的解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于网友的多次提问.并且没有个完整的回答.这里给出总结,遗漏的话大家补充.

首先,必须明白的是,typedefstruct是两个不同的定义式,

typedef typename1 typename2; //,两个type的名字在该定义式的可见范围内是等价的

struct typename3 {....}; //这是一个type的定义式,c,必须这样使用: struct typename3 ob;

那么好,现在可以考虑一些具体的情况,

情况1:

有时候typename3只需要一个实体.那么这个type的名字就没意义存在了, 于是,

struct {   

   int x,y;

 }objectname;

对于编译器来说这儿有两个定义式:

struct tempname {

   int x,y;

 };

struct tempname objectname;

情况2:

有时候,我们觉得 struct typename objectname这个写法太麻烦,那么你可能希望有简单写法,于是

 

typedef struct  {

   int x,y;

 }typename4;

//于是你可以tempname4 objectname;

对于编译器来说这里也有两个定义式

 

struct tempname {

   int x,y;

 };

typedef tempname typename4; //注意他们的顺序.

情况3:

情况2会遇到一个问题,如果结构体中要是有自身type的成员怎么办呢?

typedef struct {

   typename4 *p;

 }typename4;

看去好像很合理?那么到编译器哪里:

struct tempname {

    typename4 *p;//什么是typename4?我不认识....

 };

typedef tempname typename4;

于是你只好

struct tempname {

    struct tempname *p;//认识....

 };

typedef tempname typename4;

如果你想简单点,那就人为的改变他的定义顺序

typedef struct tempname typename4;

struct tempname {

    typename4 *p;//认识....

 };

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值