C语言学习笔记——结构

/*摘自《C程序设计语言·第二版》*/

  1. 结构的基本知识

        关键字struct引入结构声明。结构声明由包含在花括号内的一系列声明组成。struct后面的名字是可选的,称为结构标记(这里为point)。结构标记用于为结构命名,在定义之后,结果标记就代表花括号内的声明,可以用它作为该声明的简写形式。

        结构中的变量称为成员。结构的成员,结构标记和普通变量(即非成员)可以采用相同的名字,他们之间不会冲突。另外,不同结构中的成员可以使用相同的名字。

        struct声明定义了一种数据类型。在标志结构成员表结束的右花括号之后可以跟一个变量表,这与其他基本类型的变量声明是相同的,如

        从语法角度来说,这用方式的声明与以下声明类似

 

         如果结构声明的后面不带变量表,则不需要为它分配存储空间,他仅仅描述了一个结构的模板或轮廓。但是,如果结构声明中带有标记,那么在以后定义结构实例时便可以使用该标记定义。例如,对于上面给出的结构声明point,语句

        在表达式中,可以通过下列形式引用某个特定结构中的成员:

                结构名.成员

其中结构成员运算符“.”将结构名与成员名连接起来。例如,可用下列语句打印点pt的坐标:

或者通过下列代码计算原点(0,0)到点pt的距离:

 

2.结构与函数

        结构的合法操作只有几种:作为一个整体复制和赋值,通过&运算符取地址,访问其成员。其中,复制和赋值包括向函数传递参数以及从函数返回值。结构之间不可以进行比较。可以用一个常量成员值列表初始化结构,自动结构也可以通过赋值进行初始化。

        接下来用三种方法传递结构:一是分别传各个结构成员,二是传递整个结构,三是传递指向结构的指针。

        首先看一下函数makepoint,它带有两个整型参数,并返回一个point类型结构:

 现在可以用makepoint函数动态地初始化任意结构,也可以向函数提供结构类型的参数,例如:

 

其中,函数的参数和返回值都是结构类型。

        假定p是一个指向结构的指针,可以用

                p -> 结构成员

这种形式引用相应的结构成员。

3.类型定义(typedef)

        C语言提供了一个称为 typedef 的功能,用它来建立新的数据类型名,例如,声明

将Lenght定义为与int具有同等意义的名字。类型Lenght可用于类型声明,类型转换等,它和类型int完全相同,例如:

其中,将String定义为与char*或字符指针同义,此后便可以在类型声明和类型转换中使用String。

4.联合

        联合是可以(在不同时刻)保存不同类型和长度的对象和变量,编译器负责跟踪对象的长度和对其要求。联合提供了一种方式,以在单块存储区中管理不同类型的数据,而不需要在程序中嵌入任何机器相关的信息。

 

         变量u必须足够大,以保存这三种类型中最大的一种,具体长度同具体的实现有关。这些类型中的任何一种类型的对象都可以付给u,且可使用在随后的表达式中,但必须保证是一致的:读取的类型必须是最近一次存入的类型。程序员负责跟踪当前保存在联合中的类型。如果保存的类型与读取的类型不一致,其结果取决于具体的实现。

        可以通过下列语法访问联合中的成员:

                联合名.成员名

                联合指针 -> 成员

它与访问结构的方式相同。如果用变量utype跟踪保存在u中的当前数据类型,则可以像下面这样使用联合:

/*这本书是真的好兄弟们*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值