第8章 结构型与自定义类型

  1. 结构型的定义。
    1. 结构型数据的特点。
      1. “构造类型”是由若干个数据类型相同或不同的数据组合而成的。
      2. 数组就是一种构造类型,但是它只能存放数据类型相同的若干个数据。为了整体存放类型不同的相关数据,C语言提供了另一种构造类型:结构型。
      3. C语言规定用户可以自己定义一种数据类型来存放类型不同的数据。这种数据类型就称为“结构型”。
    2. 结构型的定义。
      1. struct 结构型名
        {数据类型符1 成员1名;
        数据类型符2 成员2名;
        ...
        数据类型符n 成员n名;
        };
      2. 需要注意结构型定义语句的右花括号后面有一个分号。
      3. 数据类型符可以是基本类型说明符,也可以是某种已定义过的结构型。
      4. 成员名可以是标识符、标识符[长度]、*标识符等。
      5. 成员也称为“域”、“结构分量”。
      6. 此后,可以使用“struct 结构型名”作为一种“数据类型符”来定义该类型的变量、数组、指针变量等。
      7. 结构型仅仅是一种数据类型,系统并不会给结构型成员分配内存。当它用来定义变量时,才会给定义的变量分配内存。
      8. 结构型的定义是可以嵌套的,即某个结构型成员的数据类型可以是另一个已经定义过的结构型。
  2. 结构型变量的定义和成员的引用。
    1. 结构性变量的定义和初始化。
      1. 先定义结构型,后定义变量。
        1. struct student
          {long number;
          char name[10];
          char sex;
          float score[3];
          };

          struct student x, y;
        2. 结构型变量定义时赋初值:
          struct student x = {10001L, "zhao1", 'f', {89, 94, 86}},
          y = {10001L, "zhao2", 'f', {89, 94, 86}};
        3. 定义了结构型变量时,需要给其分配内存。分配的内存字节数等于该结构型所有成员占用的字节数之和。而且是按照定义时成员的排列顺序依次分配给每个成员的。
        4. 在定义结构型变量的同时,可以对结构型变量的所有成员赋值。
      2. 定义结构型的同时定义变量。
        1. struct student
          {long number;
          char name[10];
          char sex;
          float score[3];
          } x = {10001L, "zhao1", 'f', {89, 94, 86}};

          struct student y = {1001L, "zhao1", 'f', {98, 94, 83}};
      3. 定义无名称的结构型的同时定义变量。
        1. struct
          {long number;
          char name[10];
          char sex;
          float score[3];
          } x = {10001L, "zhao1", 'f', {89, 94, 86}},
          y = {1001L, "zhao1", 'f', {98, 94, 86}};
    2. 结构型变量成员的引用。
      1. 结构型变量成员的引用方法。
        1. 结构型变量.成员名
        2. 其中的“.”称为成员运算符,是双目中缀运算符。前一个对象必须是结构型变量(或结构型数组元素),后一个对象是该结构型的成员名。
        3. 成员运算符的运算级别是最高的,和圆括号运算符“()”、下标运算符“[]”的优先级是相同的,结合性是自左向右的。
        4. 如果某个结构型变量的数据类型又是一个结构型,则其成员的引用方法如下:
          外层结构型变量.外层结构型成员名.内层成员名
        5. 嵌套结构型的数据,外层结构型变量的结构型成员一般是不能直接引用的,因为外层结构型变量的结构型成员相当于结构型变量,而结构型变量一般是不能直接引用的。
      2. 结构型变量成员地址的引用方法。
        1. 成员是变量形式的变量地址:&结构型变量名.成员名
        2. 成员是数组形式的数组首地址:结构性变量名.成员名
        3. 成员是组数,其数组元素的地址:&结构性变量名.成员数组[下标]
      3. 结构型变量地址的引用方法。&结构型变量名
    3. 结构型数组的定义和数组元素成员的引用。
      1. 结构型数组的定义和初始化。
        1. 先定义结构型,然后再定义结构型数组并赋值。
        2. 定义结构型的同时定义数组并赋值。
        3. 定义无名称的结构型的同时定义数组并赋值。
      2. 结构型数组元素成员的引用。
        1. 引言。
          1. 和结构型变量相同,一般不能直接使用结构型数组元素,只能使用其成员。
          2. 结构型数组元素成员的地址可以使用。例如可以存放到指针变量中。
          3. 结构型数组元素的地址和结构型数组首地址也可以使用。
        2. 结构型数组元素成员的引用方法。结构型数组名[下标].成员名
        3. 结构型数组元素成员地址的引用方法。&结构型数组名[下标].成员名
        4. 结构型数组元素地址的引用方法。&结构型数组名[下标]
        5. 结构型数组首地址的引用方法。结构型数组名
    4. 指向结构型数据的指针变量的定义和使用。
      1. 指向结构型变量的指针变量。
        1. 定义指向结构型变量的指针变量,需要在结构型指针变量名前加一个“*”。
        2. 当一个结构型变量的地址已赋予相同结构型的指针变量,就可以使用以下两种方式来引用该结构型变量的成员,其作用完全相同。
          1. 方式1 (*指针变量).成员名
          2. 方式2 指针变量->成员名
          3. 其中“->”称“指向成员运算符”。该运算符是双目中缀运算符,前一个对象必须是结构型变量或(数组元素)的地址,也可以是已指向某个结构型变量或数组元素的指针变量;后一个对象必须是该结构型的成员名。
          4. C语言规定,定义某个结构型时,其成员的类型也可以是本结构型,但是这个成员只能是指针变量或指针数组,不能是非指针型的变量或数组。
      2. 指向结构型数组的指针变量。
        1. 指针变量指向数组元素。可以使用下列两种方式来引用该元素的成员。
          1. 方式1 (*指针变量).成员名
          2. 方式2 指针变量->成员名
        2. 指针变量指向数组。可以使用下列两种方式来引用下标为k的数组元素的成员。
          1. 方式1 (*(指针变量+k)).成员名
          2. 方式2 (指针变量+k)->成员名
      3. 在函数间传递结构型数据。
        1. 使用全局外部变量传递结构型数据。需要在程序开头定义结构型及其变量或数组。
        2. 使用返回值方式传递结构型数据。
        3. 使用形参与实参方式传递结构型数据。
          1. 使用地址传送方式。
          2. 使用值传递方式。
    5. 结构型程序设计举例。
    6. 用户自定义类型。
      1. 引言。
        1. C语言允许用户定义自己习惯的数据类型符,来替代系统提供的基本数据类型符、数组类型、指针类型和用户自定义的结构型等。
        2. 一旦程序中定义了用户自己的数据类型符(称为用户类型符)之后,就可以在改程序中用这个用户类型符来定义变量的类型、数组的类型、指针变量的类型、函数的类型等。
        3. 【格式】typedef 类型符1 类型符2
        4. 类型符1 可以是基本数据类型符,也可以是用户自定义的无名称结构型。
        5. 类型符2 用户自选的一个标识符,作为用户类型符,通常建议用大写字母来组成。
      2. 基本数据类型符的定义。
        1. 【格式】typedef 基本数据类型符 用户类型符
      3. 数组类型的自定义。
        1. 【格式】typedef 基本数据类型符 用户类型符[数组长度]
      4. 结构型的自定义。
        1. 【格式】typedef struct
          {数据类型符 成员名1;
          数据类型符 成员名2;
          ...
          数据类型符 成员名n;
          } 用户类型符;
      5. 指针型的自定义。
        1. 【格式】typeof 基本数据类型符 *用户类型符

发表评论

电子邮件地址不会被公开。 必填项已用*标注