用户自定义数据类型
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.2 共 用 体
1.2.1 共用体的定义
• 定义一个共用体类型的一般形式为: • union 共用体名 •{ • 成员表 • }; • 成员表中含有若干成员,成员的一般形式为: • 类型说明符 成员名 • 成员名的命名应符合标识符的规定。
1.2.2 共用体变量的应用
• 共用体变量的说明和结构体变量的说明方式相 同,也有3种形式:先定义再说明,定义的同 时说明和直接说明。
• 对共用体变量的赋值、使用都只能是对变量的 成员进行。共用体变量的成员表示为: 共用体变量名.成员名
1.3 动态内存的分配
1.分配内存空间函数malloc
• 调用形式: • (类型说明符*) malloc (size) • 功能:在内存的动态存储区中分配一块长度为size的连续区
域Leabharlann Baidu函数的返回值为指向该区域的首地址的指针。
且定义数组的同时给其所有成员赋了初值。
• 2. 在定义结构的同时定义数组
• struct stu •{ • char name[9]; • int no; • int age; • int score; • }stu1[30],stu2[20]; • 和基本类型的数组一样,对于结构体类型的一维数组、二维数组,也可以
• 2. 在定义结构体类型的同时说明结构体变量
• 同构造数组类型一样,可以在定义类型的同时定义变量,即将格式改为: • struct 结构体名 •{ • 成员项列表 • }变量名列表;
• 3. 直接说明结构变量
struct •{ • int no; • char name[20]; • char sex; • float score; • } stu1,stu2; • 第3种方法与第2种方法的区别在于,第3种方法中省去了结构体名,而直
1.1 结 构 体
1.1.1 结构体类型及其定义
• 具体的形式如下: • struct 结构体名
{ • 类型名1 成员名1; • 类型名2 成员名2; • …… • 类型名n 成员名n; • };
1.1.2 结构体变量的定义与引用
• 1.先定义结构体,再说明结构体变量
• struct student •{ • int no; • char name[20]; • char sex; • float score; • }; • struct student stu1,stu2; • 这段程序说明了两个变量stu1和stu2为结构体类型。
定义指向它们的指针变量。
• 结构体数组元素和基本类型的数组元素一样, 也是通过数组名和下标来引用的,不同的是其 类型是结构体类型。因此,对结构体数组元素 的引用与对结构体变量的引用一样,也是逐级 引用,只能对最低级的成员进行存取和运算。
• 一般的引用形式:
• 数组名[下标].成员名
1.1.4 结构体类型的指针
• 使用一个指针变量指向一个结构体变量时, 该指针变量称为结 构体指针变量。
• 结构体指针变量中的值是所指向的结构体变量的首地址。通过 结构体指针即可访问该结构体变量,这与数组指针和函数指针 的情况是相同的。
• 结构体指针变量说明的一般形式为: • struct 结构体名 *结构体指针变量名;
•
结构体类型和结构体变量是两个不同的概念,不能混淆。结构
•
定义结构体变量当然是为了在程序中引用,但引用时,需要注意
以下几点:
• (1)不能将结构体变量作为一个整体输入和输出。例如,已定义了 stu1和stu2为结构体变量并且它们已有值,出现下面的引用是不正确 的:
• printf("%d,%c,%c,%f\n",stu1);
• (2)可以将一个结构体变量作为一个整体赋给另一个具有相同类型 的结构体变量。例如:
• • (类型说明符*):表示把返回值的类型强制转换为该类型
指针。 • size:是一个无符号数。 • 例如: • pc=(char *)malloc(100); • 表示分配100个字节的内存空间,并强制转换为字符数组类
型,函数的返回值为指向该字符数组的指针,把该指针赋 予指针变量pc。
接给出结构体变量。
• 结构体类型变量成员的引用形式:
•
.成员名
• (*指针变量名).成员名
•
->成员名
• 需要说明的是,后两个表示形式只在指针变量指向结构体类型变量时才可 用。例如,stu1.num 即第1个人的学号,stu2.sex 即第2个人的性别。如 果成员本身又是一个结构体,则必须逐级找到最低级的成员才能使用。例 如,stu1.birthday.month即第1个人出生的月份,可以在程序中单独使用, 与普通变量完全相同。
体类型只能表示一个结构体形式,编译系统并不对它分配内存空间。
只有当某变量被说明为这种类型的结构体时,才对该变量分配存储
空间。因此,上面&stu这种写法是错误的,不可能去取一个结构体
名的首地址。有了结构体指针变量,就能更方便地访问结构体变量
的各个成员。
其访问的一般形式为:
• (*结构体指针变量).成员名
• (4)结构体变量的成员可以像普通变量一样进行各种运算(根据其 类型决定可以进行的运算)。
1.1.3 结构体数组
• 定义一个结构体数组有两种方法。
• 1.先定义结构体再定义数组
• struct student •{ • char name[9]; • int no; • int age; • int score; • }; • struct student • stu1[30]={{"Li Xia",21001,18,98}, {"Chen Fei",21002,17, 86}…{"Zhao Wei",21030,19,79}}; • 上述语句表示定义了结构体数组stu1,数组中含有30个元素,每个元素都是struct student这种结构体类型,并
• struct student stu1={10020,"Chen Xia","女", 98};
• struct student stu2;
• stu2=stu1;
• (3)如果成员本身又属于一个结构体类型,而结构体中只能对最低 级的成员进行赋值或存取以及运算,所以要用若干成员运算,一级一 级地找到最低级的成员进行运算。