结构体

本文介绍了C语言中的结构体定义,通过`struct`关键字创建新的数据类型,如示例中的`complex_struct`,用于表示直角坐标和极坐标。文章还讨论了`enum`关键字和结构体的嵌套定义,以及结构体的初始化方法,包括嵌套初始化、平坦初始化以及C99的成员级初始化。最后,提到了访问嵌套结构体成员时使用多个`.`运算符的规则。

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

定义结构

为了定义结构,您必须使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:

struct [structure tag]{   member definition;   member definition;   ...   member definition;} [one or more structure variables];

例:

struct Stu  
{  
int num;  
char *name;  
char *sex;  
float score;  
};  
struct Stu boy1,boy2;  

数据类型标志

complex_struct结构体有一个数据类型标志和两个浮点数组成,如果数据类型标志为0,那么两个浮点数就表示直角坐标,如果数据类型标志为1,那么两个浮点数就表示极坐标。这样,直角坐标和极坐标的数据都可以适配到complex_struct结构体中,无需转换和损失精度:

enum coordinate_type{RECYANGULAR,POLAR};
struct complex_struct{
        enum coordinate_type t;
double a,b;
};

enum关键字的作用和struct关键字类似,把coordinate_type这个标识符定义为一个标签,strucct complex_struct 表示一个结构类型体,而俄怒骂coord_type 表示一个枚举类型。RECTANGULAR就表示常量0,POLAR表示常量1.

嵌套结构体

结构体也是一种递归定义:结构体的成员具有某种数据类型,而结构体本身也是一种数据类型。结构体的成员可以是另外一个结构体,即结构体可以嵌套定义。

初始化也可以嵌套 ,例如:

struct segment s={{1.0,2.0},{4.0,6.0}};

也可以Flat(平坦)的初始化,例如:

struct segament s={1.0,2.0,4.0,6.0};

甚至可以把两种方式混合使用(这样可读性很差,应该避免):

struct  segment s={{1.0,2.0},4.0,6.0};

利用C99的新特性也可以做Menberwise Initialization,例如:

struct  segment s={.start.x=1.0,.end.x=2.0,};

访问嵌套结构体的成员要用到多个“.”运算符,例如:

s.start.t=RECTANGULAR;

s.start.a=1.0;

s.start.b=2.0;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值