首页 理论教育 C语言程序设计教程|结构体变量详解

C语言程序设计教程|结构体变量详解

时间:2023-10-23 理论教育 版权反馈
【摘要】:这种形式由于省略了结构体类型名,因此也就不能用它来定义其他的变量。对于结构体类型变量的成员,可以进行何种运算是由其类型决定的。C语言不允许用赋值语句将一组常量直接赋值给一个结构体变量。不同的是,如果结构体变量的某个成员本身又是结构体类型,则该成员的初值为一个初值表。

C语言程序设计教程|结构体变量详解

用户自定义的结构体类型,与系统定义的标准类型(int、char等)一样,均可用来定义变量的类型。定义结构体变量的方法有以下几种形式。

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

例如,利用学生信息结构体类型的定义,定义相应的结构体变量。结构体类型变量student1、student2拥有结构体类型的全部成员。用这种方式定义结构体类型变量的一般形式如下:

struct结构体类型名结构体变量名表;

2.在定义结构体类型的同时,定义结构体类型变量

例如,对结构体类型变量studentl和student2的定义,可以改为如下形式:

被定义的结构体变量studentl和student2直接在结构体类型定义的大括号后、分号前给出。如果编程需要,还可以使用struct student_type定义其他的变量。用这种方式定义结构体变量的一般形式如下:

struct结构体类型名

{成员表列;}结构体类型变量表;

3.直接定义结构体类型变量

例如:

此时只是直接定义了两个结构体变量studentl和student2为上述结构体类型。这种形式由于省略了结构体类型名,因此也就不能用它来定义其他的变量。用这种方式定义结构体变量的一般形式如下:

【说明】结构体类型与结构体类型变量是两个不同的概念,其区别如同int类型与int型变量。只能对变量进行赋值、存取或运算,而不能对类型进行赋值、存取或运算。在编译时,对类型是不分配内存单元的,只对变量分配内存单元。

就像声明一个普通变量那样,系统将为结构体类型变量分配存储单元,存储单元的大小取决于变量的数据类型。在这里,当声明一个结构体类型变量时,系统同样要为结构体类型变量分配存储单元,其大小为该结构体类型变量各个成员所占内存单元之和。同样,系统也要为其分配一段连续的存储单元,依次存储各成员数据。

在程序中使用结构体变量时,一般情况下不把结构体变量作为一个整体参与数据处理,而是用结构体变量的各个成员来参与各种运算和操作。例如,赋值、输入、输出、运算等操作,都是通过结构体变量的成员来实现的。

引用结构体变量成员的一般形式如下:

结构体变量名.成员名

例如:

如果结构体变量的成员本身又是一个结构体类型的数据,那么必须逐级找到最低级的成员才能使用。例如:

(www.xing528.com)

关于结构体变量有如下几点说明。

(1)结构体成员是结构体变量中的一个数据,成员项的数据类型是在定义结构体类型时定义的。对于结构体类型变量的成员,可以进行何种运算是由其类型决定的。允许参加运算的种类与相同类型的简单变量的种类相同。例如:

(2)可以引用结构体变量成员的地址,也可以引用结构体变量的地址。例如:

(3)结构体变量的地址主要用作函数参数,传递的是结构体变量的地址。

(4)一个结构体变量也可以作为一个整体来引用。

C语言允许两个相同类型的结构体变量之间相互赋值,这种结构体类型变量之间赋值的过程是将一个结构体变量的各个成员的值赋给另一个结构体变量的相应成员。下面的赋值语句是合法的。

C语言不允许用赋值语句将一组常量直接赋值给一个结构体变量。下面的赋值语句是不合法的。

(5)结构体类型变量也可以进行初始化

结构体变量初始化的格式与一维数组的初始化相似。不同的是,如果结构体变量的某个成员本身又是结构体类型,则该成员的初值为一个初值表。例如:

注意:结构体变量的各个成员初值的数据类型,应该与结构体变量中相应成员的数据类型一致,否则会出错。

【例9-1】结构体变量应用。

例9-1 运行视频

程序运行结果如图9-1所示。

图9-1 例9-1的运行结果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈