Mohican_1/29 C语言程序设计学习笔记—第九章 用户建立数据类型
2018-01-31 19:47
260 查看
第九章 用户建立数据类型
9.1定义和使用结构体变量
1.定义:C语言允许用户自己建立不同类型数据组合成的组合型数据类型就是结构体
2.形式: struct 结构体名
{ 成员表列
类型名 成员名 ; } ; //成员可以属于另一结构体类型
3.定义结构体类型变量
(1)先 声明结构体类型 后 定义该类型变量
Struct student stu1 ,stu2 ;
(2)在声明类型的同时 定义变量
例如:
Struct student
{ int xx;
char ; } stu1, stu2;
4.变量的初始化和引用
(1)运算符 “ . ” 优先级 MAX
Ø 示例:sturuct student 1= { .name = “gao bo” } ; // . name 代表结构体变量中 1中
成员1.name。其他的未指定的初始化为0,字符-‘\0’,指针-‘NULL’。
Ø 示例: 结构体变量名 .
成员名
Student . num //可以引用结构体变量的成员的值,
Ø 示例: 可以进行各种运算
Student1.score=student2.score
Ø 示例:
Student 1 = Student 2 //同类型结构体变量可以互相赋值
Ø 示例: 结构体变量成员,结构体变量的地址可以引用
Scanf(“%d”,&student1.num); //输入&student .num
Printf(“%o”,&student1); //输出首地址
代码:
#include<stdio.h>
int main()
{
structStudent
{
int num;
char name[20];
float score;
}stu1,stu2;
scanf("%d %s %f",&stu1.num,stu1.name,&stu1.score );
scanf("%d %s %f",&stu2.num,stu2.name,&stu2.score );
printf("the max is") ;
if(stu1.score > stu2.score)
{
printf(" %d %s%f",stu1.num,stu1.name ,stu1.score );
}
elseif (stu1.score < stu2.score)
{
printf(" %d %s %f",stu2.num,stu2.name,stu2.score);
}
else
{
printf("%d %s %f",stu1.num,stu1.name ,stu1.score );
printf(" %d %s %f",stu2.num,stu2.name,stu2.score);
}
return 0;
}
9.2结构体数组
1. 定义: struct
结构体名
{成员表} 数组名【数组长度】;
2. 初始化:
数组 = {初始化表}
Struct Student stu [3]={ “ ” , ” ” , ” ” }
9.3结构体指针
1.指向结构体变量的指针
Ø 指向结构体变量;
Ø 指向运算符“ ->”
示例: p->number ==== (*p).number p指向结构体中number成员
Ø 指向结构体数组中得元素 //类型必须相同
示例:
structstudent *p1 //p1可以指向struct student类型的变量或数组元素
3. 指向结构体数组的指针
Ø 结构体数组在内存中连续存放。
4. 用结构体变量和其指针作函数参数
结构体变量的值传递给另一个参数,三种方法:
(1)用结构体变量的成员作为参数
(2)用结构体变量作为实参
(3)指向结构体变量的指针作为实参,将变量地址传给形参
9.4用指针处理链表
1.链表:动态进行存储分配的一种结构。
结点:
Ø 用户需要的实际数据
Ø 指向下一个节点的地址(指针变量存放)
Struct Student
{
Int num;
Int score ;
Struct Student * next ; //next 指针变量,指向结构体变量
}
2.静态链表:所有节点在程序中定义,不是临时开开辟,也不能用完后释放
3.动态链表:结点一个个开辟,并建立起前后相链接的关系。
9.5共用体类型
1.定义:
几个不同的辩论共享一段内存的结构,成为“共用体”类型的结构。
2.一般形式:
Union 共用体名 union data
{ {
成员表列 int i ; char ch; float f;
}变量表列; }a,b,c//定义变量
3.区别
Ø 结构体变量:内存长度是各个成员内存长度之和,每个成员分别占有自己的内存单元。
Ø 共用体变量:内存长度等于最长的成员的长度
5. 引用
Ø 不能引用公园提变量,只能引用共用体变量中的成员。
举例: a.i a.ch a.f
6. 注意
(1) 每一次只能存放其中一个成员,而不是同时存放几个
(2) 可以用共用体变量初始化,但是初始化表中只能由一个常量。
(3) 最后一次被赋值的成员取代原有的
(4) 地址与其各个成员同一个地址 &a.i &a.ch,&a.f
(5) 不能对变量名赋值,也不能通过引用变量名得到一个值
9.6使用枚举类型
1.定义:
一个变量值有几种可能的值,所谓枚举“把可能的值一一举例‘。
2.一般形式:
enum [ 枚举名 ] {
枚举元素列表 };
enum Student { name, number, score};
3.注意:
(1)C编译对枚举类型的枚举元素按照常量处理 ,成为枚举常量。
(2)每一个枚举元素代表一个整数,根据顺序默认值为0,1,2,3,4
也可以人为制定 enumstudent{num1=8,num2=9.num3=6}number,
(3)枚举元素可以判断比较
9.7用typdef声明新类型名
1.用一个新的类型名代替原有类型名
Ø typedef 的作用——可以用typedef声明新的类型名来代替已有的类型名。
Ø 声明方式:typedef
类型名称 新的类型名称。
示例:
Typedef int integer ; //指定用integer为类型名。作用与int相同
Int I , j ; 等价于 integer I , j;
2.命名一个简单的类型名代替复杂的类型表示方法
(1)新的类型名代表结构体类型
Typedef struct
{
int month;
int day;
int year;
} Date; //新的类型名Date, 可以用其定义变量
Date birthday ; //定义结构体类型变量birthday
Date *p; // 定义结构体变量p,指向其结构体类型数据
(2)命名一个新的类型名代表数组类型
(3)命名一个新的类型代表指针类型
(4)命名一个新的类型名代表指向函数的指针类型
Ø 总结:按照定义变量的方式,将变量名换成新的类型名,在前面加上typedef,声明了
新类型名代表原来的类型。
9.1定义和使用结构体变量
1.定义:C语言允许用户自己建立不同类型数据组合成的组合型数据类型就是结构体
2.形式: struct 结构体名
{ 成员表列
类型名 成员名 ; } ; //成员可以属于另一结构体类型
3.定义结构体类型变量
(1)先 声明结构体类型 后 定义该类型变量
Struct student stu1 ,stu2 ;
(2)在声明类型的同时 定义变量
例如:
Struct student
{ int xx;
char ; } stu1, stu2;
4.变量的初始化和引用
(1)运算符 “ . ” 优先级 MAX
Ø 示例:sturuct student 1= { .name = “gao bo” } ; // . name 代表结构体变量中 1中
成员1.name。其他的未指定的初始化为0,字符-‘\0’,指针-‘NULL’。
Ø 示例: 结构体变量名 .
成员名
Student . num //可以引用结构体变量的成员的值,
Ø 示例: 可以进行各种运算
Student1.score=student2.score
Ø 示例:
Student 1 = Student 2 //同类型结构体变量可以互相赋值
Ø 示例: 结构体变量成员,结构体变量的地址可以引用
Scanf(“%d”,&student1.num); //输入&student .num
Printf(“%o”,&student1); //输出首地址
代码:
#include<stdio.h>
int main()
{
structStudent
{
int num;
char name[20];
float score;
}stu1,stu2;
scanf("%d %s %f",&stu1.num,stu1.name,&stu1.score );
scanf("%d %s %f",&stu2.num,stu2.name,&stu2.score );
printf("the max is") ;
if(stu1.score > stu2.score)
{
printf(" %d %s%f",stu1.num,stu1.name ,stu1.score );
}
elseif (stu1.score < stu2.score)
{
printf(" %d %s %f",stu2.num,stu2.name,stu2.score);
}
else
{
printf("%d %s %f",stu1.num,stu1.name ,stu1.score );
printf(" %d %s %f",stu2.num,stu2.name,stu2.score);
}
return 0;
}
9.2结构体数组
1. 定义: struct
结构体名
{成员表} 数组名【数组长度】;
2. 初始化:
数组 = {初始化表}
Struct Student stu [3]={ “ ” , ” ” , ” ” }
9.3结构体指针
1.指向结构体变量的指针
Ø 指向结构体变量;
Ø 指向运算符“ ->”
示例: p->number ==== (*p).number p指向结构体中number成员
Ø 指向结构体数组中得元素 //类型必须相同
示例:
structstudent *p1 //p1可以指向struct student类型的变量或数组元素
3. 指向结构体数组的指针
Ø 结构体数组在内存中连续存放。
4. 用结构体变量和其指针作函数参数
结构体变量的值传递给另一个参数,三种方法:
(1)用结构体变量的成员作为参数
(2)用结构体变量作为实参
(3)指向结构体变量的指针作为实参,将变量地址传给形参
9.4用指针处理链表
1.链表:动态进行存储分配的一种结构。
结点:
Ø 用户需要的实际数据
Ø 指向下一个节点的地址(指针变量存放)
Struct Student
{
Int num;
Int score ;
Struct Student * next ; //next 指针变量,指向结构体变量
}
2.静态链表:所有节点在程序中定义,不是临时开开辟,也不能用完后释放
3.动态链表:结点一个个开辟,并建立起前后相链接的关系。
9.5共用体类型
1.定义:
几个不同的辩论共享一段内存的结构,成为“共用体”类型的结构。
2.一般形式:
Union 共用体名 union data
{ {
成员表列 int i ; char ch; float f;
}变量表列; }a,b,c//定义变量
3.区别
Ø 结构体变量:内存长度是各个成员内存长度之和,每个成员分别占有自己的内存单元。
Ø 共用体变量:内存长度等于最长的成员的长度
5. 引用
Ø 不能引用公园提变量,只能引用共用体变量中的成员。
举例: a.i a.ch a.f
6. 注意
(1) 每一次只能存放其中一个成员,而不是同时存放几个
(2) 可以用共用体变量初始化,但是初始化表中只能由一个常量。
(3) 最后一次被赋值的成员取代原有的
(4) 地址与其各个成员同一个地址 &a.i &a.ch,&a.f
(5) 不能对变量名赋值,也不能通过引用变量名得到一个值
9.6使用枚举类型
1.定义:
一个变量值有几种可能的值,所谓枚举“把可能的值一一举例‘。
2.一般形式:
enum [ 枚举名 ] {
枚举元素列表 };
enum Student { name, number, score};
3.注意:
(1)C编译对枚举类型的枚举元素按照常量处理 ,成为枚举常量。
(2)每一个枚举元素代表一个整数,根据顺序默认值为0,1,2,3,4
也可以人为制定 enumstudent{num1=8,num2=9.num3=6}number,
(3)枚举元素可以判断比较
9.7用typdef声明新类型名
1.用一个新的类型名代替原有类型名
Ø typedef 的作用——可以用typedef声明新的类型名来代替已有的类型名。
Ø 声明方式:typedef
类型名称 新的类型名称。
示例:
Typedef int integer ; //指定用integer为类型名。作用与int相同
Int I , j ; 等价于 integer I , j;
2.命名一个简单的类型名代替复杂的类型表示方法
(1)新的类型名代表结构体类型
Typedef struct
{
int month;
int day;
int year;
} Date; //新的类型名Date, 可以用其定义变量
Date birthday ; //定义结构体类型变量birthday
Date *p; // 定义结构体变量p,指向其结构体类型数据
(2)命名一个新的类型名代表数组类型
(3)命名一个新的类型代表指针类型
(4)命名一个新的类型名代表指向函数的指针类型
Ø 总结:按照定义变量的方式,将变量名换成新的类型名,在前面加上typedef,声明了
新类型名代表原来的类型。
相关文章推荐
- 第九章:用户自己建立数据类型(结构体)
- c语言解析系列(6)用户建立自己的数据类型
- COM组件中使用用户自定义数据类型
- oracle 11g linux 建立表空间 用户 授权 数据导入 导出
- 批量替换数据库中所有用户数据表中字段数据类型为char和varchar到nvarchar的脚本
- go数据类型之结构体(用户自定义类型两种方式)
- ViewState和用户自定义数据类型
- 第四章:用户自定义和枚举数据类型
- C++ 用户自定义数据类型
- 批量替换数据库中所有用户数据表中字段数据类型为char和varchar到nvarchar的脚本
- 如何快速全面建立自己的大数据知识体系? 大数据 ETL 用户画像 机器学习 阅读232 作者经过研发多个大数据产品,将自己形成关于大数据知识体系的干货分享出来,希望给大家能够快速建立起大数据
- 在mysql中建立表格,表名称和列的定义都使用键盘输入,用户数据也要通过键盘输入。
- sp_rename 更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。
- SQL批量更新数据库中所有用户数据表中字段类型为tinyint为int
- SqlServer2000中用户自定义数据类型的使用
- Mohican_9/21 基本数据类型
- 第三十一天 MySQL并发控制、存储引擎介绍、用户权限管理、缓存管理和数据类型选择
- 如何把&quot;用户定义的数据类型&quot;的ower改为dbo?
- 第四章 用户自定义数据类型
- 用户自定义数据类型和默认值