目录

  • 1 第一章 C语言简介
    • 1.1 C语言前世今生
    • 1.2 主流开发环境介绍
    • 1.3 第一个小程序解析
    • 1.4 常见编译错误
    • 1.5 章节知识点小结
  • 2 算法基础
    • 2.1 算法-程序的灵魂
    • 2.2 算法的描述-流程图
  • 3 数据类型与运算符
    • 3.1 数据描述
    • 3.2 运算符和表达式1
    • 3.3 运算符和表达式2
    • 3.4 章节知识点小结
  • 4 顺序结构程序设计
    • 4.1 输入和输出
    • 4.2 顺序结构程序设计
    • 4.3 章节知识点小结
  • 5 选择结构程序设计
    • 5.1 关系运算符和关系表达式
    • 5.2 逻辑运算符和逻辑表达式
    • 5.3 if语句
    • 5.4 条件运算符
    • 5.5 switch语句
    • 5.6 章节知识点小结
  • 6 循环结构程序设计
    • 6.1 while循环结构
    • 6.2 do_while循环结构
    • 6.3 for循环结构
    • 6.4 循环的嵌套
    • 6.5 break语句和continue语句
    • 6.6 章节知识点小结
  • 7 数组
    • 7.1 一维数组
    • 7.2 二维数组
    • 7.3 字符数组
    • 7.4 章节知识点小结
  • 8 函数
    • 8.1 子程序设计
    • 8.2 函数定义
    • 8.3 函数的调用
    • 8.4 局部变量和全局变量
    • 8.5 参数传递
    • 8.6 函数递归调用
    • 8.7 章节知识点小结
  • 9 指针
    • 9.1 指针的基本概念
    • 9.2 指针变量的定义及引用
    • 9.3 通过指针引用数组元素
    • 9.4 指向多维数组的指针和指针变量
    • 9.5 用指向数组的指针作函数参数
    • 9.6 指针与字符串
    • 9.7 函数指针和指针函数
    • 9.8 章节知识点小结
  • 10 用户自己建立数据类型
    • 10.1 定义和使用结构体变量
    • 10.2 使用结构体数组
    • 10.3 结构体指针
    • 10.4 章节知识点小结
  • 11 编译预处理
    • 11.1 宏定义预处理
    • 11.2 文件包含预处理
    • 11.3 条件编译预处理
    • 11.4 章节知识点小结
  • 12 文件
    • 12.1 文件的基本知识
    • 12.2 文件的基本操作
    • 12.3 章节知识点小结
章节知识点小结

知识点

精讲文档

第十章用户自定义数据类型

10.1 结构体数据类型概述

结构体类型定义

定义一个结构体类型的一般形式为:

struct  结构体名

{     类型标识符  成员1名字;

       类型标识符  成员2名字;

       类型标识符  成员3名字;

       …

};

结构体成员

定义结构体类型时,“{”“}”之间的内容被称为成员表列。

对结构体变量中的成员,可以单独使用,它的作用与地位相当于普通变量。

成员可以属于另一个结构体类型。

l   成员名可以与程序中的变量名相同,二者不代表同一对象

10.2 结构体变量的使用

结构体变量定义

要定义一个结构体类型的变量,可以采取以下三种方法:

1.先定义结构体类型,再定义该类型变量。

2.在定义类型的同时定义变量。

3.不指定类型名而直接定义结构体类型变量。

结构体变量引用

引用结构体变量应遵守以下规则:

1)不能将一个结构体变量作为一个整体进行输入和输出。只能对结构体变量中的各个成员分别输入和输出。引用方式为:

         结构体变量名.成员名

2)两个相同类型的结构体变量可以用等号赋值。

3)如果成员本身又属一个结构体类型,则要用若干级成员运算符,一级一级地找到最低一级的成员。只能对最低级的成员进行存取以及运算。

结构体变量初始化

结构体变量可以在变量定义时进行初始化,定义一个struct student为型的结构体变量并初始化形式如下:

struct student student1={89031,"Li  Lin",'M',2,3,1993,"123    Beijing Road"};

其中:{}中为各个成员的值。

10.3 结构体数组

结构体数组定义

定义结构体变量的方法相同,只需说明其为数组。定义结构体数组一般形式是:

struct 结构体名

    {成员表列} 数组名[数组长度];

先声明一个结构体类型,然后再用此类型定义结构体数组:

     结构体类型  数组名[数组长度];

数组元素在内存中的存储

数组各元素在内存中连续存放。

 

结构体数组初始化

对结构体数组初始化的形式是在定义数组的后面加上:

={初值表列};

例如:

struct  Person              

{  char name[20];      

    int count;                  

}leader[3]={“Li”,0,“Zhang”,0,“Sun”,0};    

结构体数组的引用

结构体数组的引用完全类似于结构体变量的引用,只是用结构体数组元素来代替结构体变量,其他规则不变。例如:

    leader[0].count++;         //引用某一数组元素的成员

10.4 结构体指针

结构体变量的指针

结构体变量也有自己的指针,一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,也可以用来指向结构体数组中的元素。

指针变量的基类型必须与结构体变量的类型相同。

成员指向运算符

成员指向运算符:->

p为指向结构体变量的指针,则以下三种形式等价:

①结构体变量. 成员名;

(*p).成员名;

p->成员名。

指向结构体的指针作函数参数

把一个完整的结构体变量作为参数传递,虽然合法,但要将全部成员值一个一个传递,费时间又费空间,开销大。如果结构体类型中的成员很多,或有一些成员是数组,则程序运行效率会大大降低。在这种情况下,用指针作函数参数比较好,能提高运行效率。

10.5 共用体数据类型

共用体类型及变量定义

使几个不同的变量共享同一段内存的结构,称为共用体类型的结构。

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

union 共用体名

{ 成员表列

}

共用体变量引用

不能直接输入和输出共用体类型变量,输入输出时用共用体变量的成员。

在使用共用体类型数据时要注意以下一些特点:

1)同一个内存段可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一种,而不是同时存放几种。

2)共用体变量中起作用的成员是最后一次赋值的成员。

3)可以对共用体变量初始化,但初始化表中只能有一个常量。

10.6 枚举数据类型

枚举类型定义

如果一个变量只有几种可能的值,可以定义为枚举类型。

定义枚举类型用enum开头。例如下面语句定义了一个枚举类型enum weekday

    enum   weekday  {sun, mon, tue, wed,  thu, fri, sat};

枚举常量

C编译对枚举类型的枚举元素按常量处理,故称枚举常量。枚举元素作为常量是有值的,C语言编译按定义时的顺序使它们的值为0, 1, 2, …。在上面定义中,sun的值为0mon的值为1……sat6

枚举变量定义

用前面定义的枚举类型enum weekday来定义变量如下:

    enum   weekday     workday, week_end;

10.7 typedef定义数据类型

typedef定义新的类型名

可以用typedef定义新的类型名来代替已有的类型名。如:

       typedef   int  INTEGER;

       typedef   float      REAL;