第九章:用户自己建立数据类型(结构体)
2017-07-29 10:02
288 查看
结构体:不同数据类型的集合(区别数组:同一类型数据的集合)
定义结构体有三种方式:
1.先定义结构体类型,再定义结构体变量赋值
struct student //struct结构体关键字,student结构标记(数据类型,类似int,flort)
{
...
};
struct student stu1,stu2;//stu1,stu2结构体对象(类似形参)
2.定义结构体类型的同时,就定义结构体变量
struct student
{
…
}stu1,stu2;
3.可以不定义类型名,直接定义结构体变量
struct
{
...
}stu1,stu2;
① 1.结构体类型定义结束后,才可对结构体变量进行初始化。不能给结构体类型成员初始化。
② 2.不能对结构体变量进行输入输出操作,只能对成员进行操作用成员访问符(.)进行操作。
③ 3.结构体类型不会分配内存,结构体变量才会分配内存(类型int
a =5;int实际不占内存,变 量a占四个字节)。
④ 对结构体可以各个赋值,也可以整体赋值。各个赋值可以每个成员赋值,整体赋值必须一一对 应。
⑤ 定义数组封号不能少。
⑥ -,输出有效字符数为2,右对齐。%-3d,左对齐。
结构体数组:
1.其定义和结构体定义一样(3种)
struct student
{
…
}stu[3];
对其中元素引用strcpy(stu[0].name, "liu");
2.指向结构体变量的指针
struct student
{}stu[3];
struct student* p;
p = &stu[0];
注意:p要指向结构体数组成员的成员要进行强制类型转换、
p = (struct student *)stu[0];****
联合体也叫共用体 union
1.不同的数据类型"共享"一个区域内存,它采用了覆盖技术,允许不同数据类型覆盖,但不能同 时处理所有成员,每一瞬间只能处理一种类型数据,占用内存,按占字节最大者开辟空间。
2.改变其中一种类型的值,可能影响到其他类型成员。
union stu
{
char a;
int b;
}stu1;
void main()
{
stu1.a ='A';
stu1.b++;
printf("A' = %c",stu1.a);//A'=
B
}
枚举类型enum
enum :是数据类型,而不是构造数据类型
定义:是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内
enum <</span>枚举标记>
{枚举常量1,枚举常量2。。。。。};
typedef
1.typedef:用户自定义类型说明符(关键字)
Typedef char NAME[20];
NAME a;//等价于char
a[20];NAME是一个字符数组类型,并且字符大小为20字节,然后用 NAME 定 义变量。
2.typedef是给已有数据类型取"别名",可以是int,float,可以是结构体,通常为大写字母,以封 号结尾。
typedefint INTEGER;//把int 型定义成INTEGER, 所以 INTEGER
a = 5等价于 int a=5;
typedeffloat PEAL;
typedefunion
{
char a;
int b;
}STU,*PORT;
//把union定义成STU1,所以STU
stu1 等价于 union stu stu1;
//把union定义成*
PORT,所以PORT stu2等价于union
student *stu2
3.typedef与#define的区别,#define是个字符串起个别名,typedef是个数据类型取别名,但两 者有本质差别。
这章节有个链表很有必要取深入的了解。
定义结构体有三种方式:
1.先定义结构体类型,再定义结构体变量赋值
struct student //struct结构体关键字,student结构标记(数据类型,类似int,flort)
{
...
};
struct student stu1,stu2;//stu1,stu2结构体对象(类似形参)
2.定义结构体类型的同时,就定义结构体变量
struct student
{
…
}stu1,stu2;
3.可以不定义类型名,直接定义结构体变量
struct
{
...
}stu1,stu2;
① 1.结构体类型定义结束后,才可对结构体变量进行初始化。不能给结构体类型成员初始化。
② 2.不能对结构体变量进行输入输出操作,只能对成员进行操作用成员访问符(.)进行操作。
③ 3.结构体类型不会分配内存,结构体变量才会分配内存(类型int
a =5;int实际不占内存,变 量a占四个字节)。
④ 对结构体可以各个赋值,也可以整体赋值。各个赋值可以每个成员赋值,整体赋值必须一一对 应。
⑤ 定义数组封号不能少。
⑥ -,输出有效字符数为2,右对齐。%-3d,左对齐。
结构体数组:
1.其定义和结构体定义一样(3种)
struct student
{
…
}stu[3];
对其中元素引用strcpy(stu[0].name, "liu");
2.指向结构体变量的指针
struct student
{}stu[3];
struct student* p;
p = &stu[0];
注意:p要指向结构体数组成员的成员要进行强制类型转换、
p = (struct student *)stu[0];****
联合体也叫共用体 union
1.不同的数据类型"共享"一个区域内存,它采用了覆盖技术,允许不同数据类型覆盖,但不能同 时处理所有成员,每一瞬间只能处理一种类型数据,占用内存,按占字节最大者开辟空间。
2.改变其中一种类型的值,可能影响到其他类型成员。
union stu
{
char a;
int b;
}stu1;
void main()
{
stu1.a ='A';
stu1.b++;
printf("A' = %c",stu1.a);//A'=
B
}
枚举类型enum
enum :是数据类型,而不是构造数据类型
定义:是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内
enum <</span>枚举标记>
{枚举常量1,枚举常量2。。。。。};
typedef
1.typedef:用户自定义类型说明符(关键字)
Typedef char NAME[20];
NAME a;//等价于char
a[20];NAME是一个字符数组类型,并且字符大小为20字节,然后用 NAME 定 义变量。
2.typedef是给已有数据类型取"别名",可以是int,float,可以是结构体,通常为大写字母,以封 号结尾。
typedefint INTEGER;//把int 型定义成INTEGER, 所以 INTEGER
a = 5等价于 int a=5;
typedeffloat PEAL;
typedefunion
{
char a;
int b;
}STU,*PORT;
//把union定义成STU1,所以STU
stu1 等价于 union stu stu1;
//把union定义成*
PORT,所以PORT stu2等价于union
student *stu2
3.typedef与#define的区别,#define是个字符串起个别名,typedef是个数据类型取别名,但两 者有本质差别。
这章节有个链表很有必要取深入的了解。
相关文章推荐
- c语言解析系列(6)用户建立自己的数据类型
- Mohican_1/29 C语言程序设计学习笔记—第九章 用户建立数据类型
- 结构体(用户自定义数据类型)
- C语言复习之建立自己的数据类型
- HashSet中存方用户自己定义数据类型数据,重写equals方法和hashCode方法
- 如何快速全面建立自己的大数据知识体系? 大数据 ETL 用户画像 机器学习 阅读232 作者经过研发多个大数据产品,将自己形成关于大数据知识体系的干货分享出来,希望给大家能够快速建立起大数据
- 4种输出类型的9X9乘法表(用户可自己选输出何种形式)
- 结构体数据类型
- JQuery DataTables 列自己定义数据类型排序
- Java 自己补充知识(2)变量 数据类型
- mysql数据库建立,使用方法,常用数据类型
- Unix基本系统数据类型和stat结构体
- COM组件中使用用户自定义数据类型
- c#之用户定义的数据类型转换介绍
- python基本数据类型的功能介绍,每个数据类型都有自己的技能
- 没做过编译器就是被人欺——从一道变态的类型转换题猜编译器的行为(指针直接调用自己的非虚函数,当时是什么类型就是什么,但数据成员仍用自己的)
- c#之用户定义的数据类型转换
- 修改用户定义数据类型对已经编译的存储过程的影响的示例.sql
- 创建用户定义的数据类型
- 6 基本数据类型或结构体的包装