当前课程知识点:C语言程序设计基础 >  7.结构体与共用体 >  7.1 结构体 >  html

返回《C语言程序设计基础》慕课在线视频课程列表

html资料文件与下载

html

定义一个结构的一般形式

一组数据往往具有不同的数据类型。例如,在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为整型或实型。显然不能用一个数组来存放这一组数据。因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。为了解决这个问题,C语言中给出了另一种构造数据类型——“结构(structure)或叫结构体。 它相当于其它高级语言中的记录。结构是一种构造类型,它是由若干成员组成的。每一个成员可以是一个基本数据类型或者又是一个构造类型。结构既是一种构造而成的数据类型,那么在说明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义函数一样。

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

struct 结构名

    {成员表列};

成员表列由若干个成员组成,每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:

    类型说明符 成员名;

成员名的命名应符合标识符的书写规定。例如:

    struct stu

    {

        int num;

        char name[20];

        char sex;

        float score;

};

在这个结构定义中,结构名为stu,该结构由4个成员组成。第一个成员为num,整型变量;第二个成员为name,字符数组;第三个成员为sex,字符变量;第四个成员为score,实型变量。应注意在括号后的分号是不可少的。结构定义之后,即可进行变量说明。凡说明为结构stu的变量都由上述4个成员组成。由此可见,结构是一种复杂的数据类型,是数目固定,类型不同的若干有序变量的集合。

结构类型变量的说明

说明结构变量有以下三种方法。以上面定义的stu为例来加以说明。

1.      先定义结构,再说明结构变量。

如:

struct stu

    {

        int num;

        char name[20];

        char sex;

        float score;

    };

    struct stu boy1,boy2;

说明了两个变量boy1和boy2为stu结构类型。

2.      在定义结构类型的同时说明结构变量。

例如:

struct stu

    {

        int num;

        char name[20];

        char sex;

        float score;

}boy1,boy2;

这种形式的说明的一般形式为:

struct 结构名

    {

成员表列

}变量名表列;

3.      直接说明结构变量。

例如:

struct

    {

        int num;

        char name[20];

        char sex;

        float score;

}boy1,boy2;

这种形式的说明的一般形式为:

struct

    {

成员表列

}变量名表列;

第三种方法与第二种方法的区别在于第三种方法中省去了结构名,而直接给出结构变量。三种方法中说明的boy1,boy2变量都具有下图所示的结构。

结构变量成员的表示方法

在程序中使用结构变量时,往往不把它作为一个整体来使用。在ANSI C中除了允许具有相同类型的结构变量相互赋值以外,一般对结构变量的使用,包括赋值、输入、输出、运算等都是通过结构变量的成员来实现的。

表示结构变量成员的一般形式是:

    结构变量名.成员名

结构变量的赋值

结构变量的赋值就是给各成员赋值。可用输入语句或赋值语句来完成。

结构变量的初始化

和其他类型变量一样,对结构变量可以在定义时进行初始化赋值。

结构数组的定义

数组的元素也可以是结构类型的。因此可以构成结构型数组。结构数组的每一个元素都是具有相同结构类型的下标结构变量。在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体。

结构指针变量的说明和使用

   指向结构变量的指针

一个指针变量当用来指向一个结构变量时,称之为结构指针变量。结构指针变量中的值是所指向的结构变量的首地址。通过结构指针即可访问该结构变量,这与数组指针和函数指针的情况是相同的。

结构指针变量说明的一般形式为:

    struct 结构名 *结构指针变量名

构名和结构变量是两个不同的概念,不能混淆。结构名只能表示一个结构形式,编译系统并不对它分配内存空间。只有当某变量被说明为这种类型的结构时,才对该变量分配存储空间。因此上面&stu这种写法是错误的,不可能去取一个结构名的首地址。有了结构指针变量,就能更方便地访问结构变量的各个成员。

其访问的一般形式为:

    (*结构指针变量).成员名

或为:

        结构指针变量->成员名

指向结构数组的指针

指针变量可以指向一个结构数组,这时结构指针变量的值是整个结构数组的首地址。结构指针变量也可指向结构数组的一个元素,这时结构指针变量的值是该结构数组元素的首地址。

ps为指向结构数组的指针变量,则ps也指向该结构数组的0号元素,ps+1指向1号元素,ps+i则指向i号元素。这与普通数组的情况是一致的。

结构指针变量作函数参数

ANSI C标准中允许用结构变量作函数参数进行整体传送。但是这种传送要将全部成员逐个传送,特别是成员为数组时将会使传送的时间和空间开销很大,严重地降低了程序的效率。因此最好的办法就是使用指针,即用指针变量作函数参数进行传送。这时由实参传向形参的只是地址,从而减少了时间和空间的开销。

下一节:7.2 共用体

返回《C语言程序设计基础》慕课在线视频列表

C语言程序设计基础课程列表:

1.顺序结构程序设计

-1.1 C语言概述

--1.1 C语言概述

--html

-1.顺序结构程序设计--1.1 C语言概述

-1.2 C语言中的数据类型

--1.2 C语言中的数据类型

--html

-1.2 C语言中的数据类型--作业

-1.3 运算符和表达式

--1.3 运算符和表达式

--html

--html

-1.3 运算符和表达式--作业

-1.4键盘输入和屏幕输出

--1.4键盘输入和屏幕输出

--html

-1.4键盘输入和屏幕输出--作业

2.选择结构程序设计

-2.1 算法

--2.1 算法

--html

-2.1 算法--作业

-2.2 关系运算符与逻辑运算符

--2.2 关系运算符与逻辑运算符

--html

-2.2 关系运算符与逻辑运算符--作业

-2.3 实现分支结构的语句

--2.3 实现分支结构的语句

--html

-2.3 实现分支结构的语句--作业

-随堂测验--作业

3.循环结构程序设计

-3.1 循环控制结构

--3.1 循环控制结构

--html

-3.循环结构程序设计--3.1 循环控制结构

-3.2 流程的转移以及循环嵌套

--3.2 流程的转移以及循环嵌套

--html

-3.循环结构程序设计--3.2 流程的转移以及循环嵌套

-3.3 计数、条件控制的循环

--3.3 计数、条件控制的循环

-3.循环结构程序设计--3.3 计数、条件控制的循环

-本章测试--作业

4.数组

-4.1 一维数组的定义及引用

-- 一维数组的定义及引用

--html

-4.1 一维数组的定义及引用--作业

-4.2 二维数组的定义及引用

--Video

--html

-4.2 二维数组的定义及引用--作业

-4.3 字符数组

--Video

--html

-4.3 字符数组--作业

-本章测试--作业

5.函数

-5.1 函数的定义、调用

--Video

--html

-5.1 函数的定义、调用--作业

-5.2 函数嵌套调用和递归调用

--5.2 函数嵌套调用和递归调用

--html

-5.2 函数嵌套调用和递归调用--作业

-5.3 变量的时间空间

--5.3 变量的时间空间

--html

-5.3 变量的时间空间--作业

-期中考试--作业

-本章测试--作业

6.指针

-6.1 指针的概念

--指针的概念

--html

-6.1 指针的概念--作业

-6.2 指针的应用

--6.2 指针的应用

--html

-6.2 指针的应用--作业

-本章测试--作业

7.结构体与共用体

-7.1 结构体

--Video

--html

-7.1 结构体--作业

-7.2 共用体

--7.2 共用体

-7.2 共用体--作业

8.文件

-8.1 文件的指针

--8.1 文件的指针

-8.1 文件的指针--作业

-8.2 文件的读写

--8.2 文件的读写

-8.2 文件的读写--作业

9.综合实例

-9..1综合实例

--综合实例

-9..1综合实例--作业

html笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。