您的位置:首页 > 其它

第九章:用户自己建立数据类型(结构体)

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是个数据类型取别名,但两 者有本质差别。

这章节有个链表很有必要取深入的了解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: