用户自己建立数据类型

用户自定义类型

为了表示实际应用中的数据,C提供了如下数据类型

          int   char   float    double  

但是,一些复杂的数据(如家谱、地图等)无法用基本数据类型方便地加以描述。

为了应对这种状况,C允许程序员根据需要自定义数据类型,以表示遇到的复杂数据。程序员定义的数据类型统称为用户自定义类型(user-defined typeUDT)。

        常见的UDT包括结构体(structure)类型、共用体(union)类型、枚举(enumeration)类型等。

结构体概述 

为了描述含有多个字段的记录,C允许自定义结构体类型,定义结构体类型的一般形式为:

struct  结构体名
{
     类型 成员名1;
     类型 成员名2;
     …
     类型 成员名n;
}; 

其中,structC的关键字,是structure的缩写,在定义时必不可少;另一个必不可少的是最后的分号。

结构体变量的定义

       虽然结构体类型是程序员自定义的数据类型,但是,一旦定义完毕,它与intfloat等基本数据类型地位相同。

       因此,可以用结构体类型来定义变量,这种变量称为结构体变量

struct student
{
    	int num;
    	char name[10];
    	char sex;
    	float height;
};
struct student s1, s2;

可按三种方式定义结构体变量:

Ø 先声明类型,再定义变量
Ø 声明类型的同时定义变量
Ø 直接定义变量,不出现结构体名

结构体变量的初始化

struct student
{
   int num;
   char name[10];
   char sex;
   float height;
};

struct student  s={99001, "李明", 'M', 1.75};

结构体变量的引用

可以按照形式:  结构体变量名.成员

来引用每个成员,其中“.称为成员运算符,它的优先级最高

关于结构体变量再强调以下几点:

1两个同类型结构体变量可直接进行赋值运算。

2不能将结构体变量作为一个整体进行输入或输出

3在定义结构体类型时,其成员的类型可以是某结构体类型

4可以使用结构体变量的成员的地址

5sizeof( )运算符

       该运算符的功能是计算某类型数据在内存中存储时所占 存储单元的大小(字节数)。其格式为:

  sizeof(数据类型)  或者  sizeof(数据)

结构体数组

n 定义 :   三种方法
n 先声明结构体类型,再定义结构体数组
n 声明结构体类型的同时定义结构体数组
n 直接定义结构体数组,不出现结构体名

 

       一般地,可以按照

  数组名[下标].成员

来引用结构体数组元素的成员

另外,在定义结构体数组时,还可以对其进行初始化。

指向结构体变量的指针

由于“.的优先级高于 “*”,所以上式中括号不能少。为了书写简便起见,C引入了指向运算符“->(*p).num可表示为p->num

一般地,若p指向某结构体变量,则可以用三种方法引用该结构体的成员:

1结构体变量 . 成员名

  s1.num=99011;

2(*p) . 成员名

  (*p).num=99011;

3p ->成员名

  p->num=99011;

结构体数据作为函数参数

       与其他数据类型一样,结构体类型的变量、指针以及数组名也可作为函数参数,进而把结构体数据传递给被调函数。 

       实际上,主调函数向被调函数传递结构体数据主要有以下两种方式:

Ø 实参和形参都是结构体变量
Ø 实参和形参都是指向结构体的指针
typedef 声明新类型名

        除了用前述方法定义新的数据类型(如结构体类型)外,C还允许用typedef为已有数据类型起别名。

  typedef 已有类型  新类型名;

共用体类型

定义共用体类型的一般形式为:

  union 共用体名

定义共用体变量的一般形式为:

   union 共用体名  变量1, 变量2, …, 变量m;

       不难发现,共用体结构体的定义形式相似,但它们的含义是不同的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值