结构的声明和结构变量结构变量的定义形式对结
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
❖
这种合一的声明放置在相应的头文件中,然后在相
应的
❖ 实现文件中用结构型别类名SNAME定义结构变量或结构 指
❖ 针类型别名SP定义结构指针:
❖
SNAME x,y,z; SP p,q,r;
8
❖ 三、对结构数据的操作
❖ 1. 结构变量的赋值操作: ❖ 考虑结构声明和结构变量a,b结构指针p的定义,如下:
❖ 而在全局范围声明的结构对于其后的程序段具有可操作性。5
❖ 在相同作用范围结构名应是唯一的。在函数体内不定义函
❖ 二、结构变量的定义形式
❖
结构变量分为全局的、局部的结构变量和静态结构变
❖ 量。指向结构变量的指针简称结构指针。结构变量或结构 指
❖ 针的定义有下面4种方式:
❖ 1. 先声明结构类型然后再定义结构变量;定义形式为:
❖
v, *p, a[2];
❖ 3. 无名结构类型直接定义结构变量,形式为: ❖ struct { 成员数据列表;} 结构变量列表; ❖ struct { float member;int v; double a[6]; } v, *p, a[2];
❖ 4. typedef 简化结构声明和变量定义 ❖ 实用程序设计中采用如下方式来声明结构和定义变量: ❖ struct SType { float member;int v; double a[6];}; ❖ typedef struct SType SNAME,*SP;
❖
结构名 结构变量名;
❖ struct 结构名 结构变量名1,结构变量名2, ... ,结构变名;
❖ 如:
struct SType v,*p,a[2];
❖
SType v,*p,a[2];
❖ 可将结构声明:
❖ struct SType { float member;int v; double a[6];};
❖ 一、结构的声明和结构变量
❖ 由关键字struct声明的数据描述称为结构类型而union
❖ 或class声明的数据描述称为联合类型或类类型,分别简称 为
❖ 结构和联合或类。
❖
结构、联合、类是集合数据类型。
❖
int、float等是系统预先取好的可以直接使用的类名,
❖ 关键字struct和union 或class后紧跟的标识符则是用户引 入
❖ 与结构变量定义: struct SType v, *p, a[2];
❖ 合为一体形成结构声明和结构变量定义同步进行的格式。
6
❖ 2. 有名结构类型直接定义结构变量,形式为:
❖ struct 结构名 { 成员数据列表; } 结构变量列表 ;
❖ struct SType { float member;int v; double a[6]; }
❖
系统一般通过高效的内存拷贝函数memcpy完成结构
变
❖ 量之间的赋值。同类型的算术变量或指针相互赋值则简单 9 地
❖ 2. 对结构指针的操作访问:
❖
取地址运算符&可以作用于结构变量a,&a运算的结
果得
❖ 到由该结构变量代表的数据集合的首地址。这个地址也 就是
❖ 结构的第一个数据成员的地址;
❖
访问指针运算符*可以作用于结构指针,访问结构指
❖ 的类名,需要事先加以声明。
1
❖
定义直接导致内存的存储单元分配,声明则是一种关
于
❖ 数据类型的描述,本身一般不涉及内存的分配。
❖
结构将密切相关的数据集合在一起。结构的声明具有
如
❖ 下的语法形式:
❖ struct structName
结构 结构名
❖ { type member;
{ 数据类型 成员名 ;
❖
struct SType { float member; int v; double a[6]; } a,b,*p;
❖ 对结构变量可以进行赋值操作,同类型的结构变量可以相 互
❖ 赋值。 其格式为:
❖
目标结构变量=源结构变量; a=b;
❖
赋值操作就是将源结构变量的数据成员复制给同类
型的
❖ 目标结构变量的相应成员。两者拥有相同的数据状态。
❖ 同一个结构中的成员不能彼此同名,但是不同结构名 的
❖ 结构可以拥有一样的成员名称,不同数量的成员。
❖ 其中枚举常数N可以界定成员数组的维数,它不占结 构
❖ 变量的内存。
4
❖
可以在结构中出现当前结构名,以声明一个指向该结
构
❖ 变量的指针,如struct A{int n;A* p;};由此形成复杂的链表
{ float member; int v;
❖
int v;
enum {N=6};
❖
double a[6];
double a[N];
❖ };
}
❖
❖
花括号包括的部分称为结构的成员数据列表,成员数
据
❖ 列表具体描述了结构的组成情况,其间每一个数据项采用
❖ [数据类型 成员名;]的格式,这种格式类似于变量定义语 句
❖ 结构。
❖
但结构的声明中不能用当前结构名声明成员变量即结
构
❖ 中不能包含自身的实例,这称为递归声明。建立结构的声 明
❖ 时不允许直接递归或间接递归。
❖
例如: struct A{int n;A a;};是不可以的。
❖
结构类型的声明可以出现在函数体内也可以位于全局
范
❖ 围。在函数体内声明的结构其有效范围仅限于该函数之内,
❖ 但不进行初始化处理,称为成员声明语句。
3
❖
关键字struct之后引出结构名为SType的结构声明,
❖ SType是用户建立的类名,类名和成员名遵循标识符的命 名
❖ 规定,结构名可以和系统内置的类名int、float和double一
❖ 样定义变量,通过结构名定义的变量称为结构变量。
❖
结构中声明的变量member,v,a[6]等是结构的成员。
❖
type2 member2;
数据类型2 成员名2;
❖
...
❖Baidu Nhomakorabea
typen membern;
数据类型n 成员名n;
❖ };
};
❖ 其中type, typen等代表已经声明的类型,具体地(下面
❖ 左边和右边是等价的):
2
❖
❖ struct SType
struct SType
❖ { float member;
7
❖
先建立一个结构类型的声明,结构名为SType, 然后
由
❖ typedef语句指定SNAME为SType的别名。
❖
SP是SType*的别名。或者干脆将上面两种形式合而
为
❖ 一有:
❖
typedef struct SType
❖ { float member;int v; double a[6];} SNAME,*SP;