C++结构体

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

结构体变量占用的内存空间是其成员 所占内存之和。 因此Student占用 struct Student 的内存空间为 { 20+4+1+4+30=59 char name[20]; 个字节。结构体变 int num; 量中的各成员在内 char sex; 存中按定义的顺序 int age; 依次排列。 char address[30]; 在定义变量时, }; struct Strudent必须 struct stu boy1,boy2; 一起使用。
通常可以按下列步骤来说明一个新 类型名: 1、按通常定义变量的方法写出定义 的主体:如:int *p; 2、用新类型名取代变量名:如:int *PCHAR; 3、在左面加上关键字typedef:如: typedef char *PCHAR; 此后就可以用新类型名去定义变量 了。如:PCHAR p; 若有:struct node { int data; struct node *next; }; typedef struct node STNODE; 则:STNODE h; 等价于 struct node h;
结构体
•数组作为一种构造型数据类型,为将多个相 关数据作为一个整体处理提供了方便。
•但是,数组只能按序组织多个相同类型的数 据,当需要将若干不同类型的相关数据作为 整体处理时,就需要使用另外一种构造型数 据类型——结构体。
•例如,一个学生的姓名 struct Student{ (name)、学号(num)、性别 char name[20]; (sex)、年龄(age)、家庭住 int num; 址(address),构成了这个 char sex; int age; 学生档案的基本信息,若要 char address[30]; 将name、num、sex、age、 }; address分别定义为相互独 立的简单变量,难以反映出 它们之间的内在联系,而通 过使用结构体类型就可以将 它们作为一个整体来处理。
பைடு நூலகம்
结构体类型变量的定义 一般形式为: struct 结构体类型名 {类型名1 成员名1; 类型名2 成员名2; … 类型名n 成员名n; };
struct Student{ char name[20]; int num; char sex; int age; char address[30]; };
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 { 成员表列 }变量名表列;
在结构体类型定义中要注意以下几点:
1、结构体类型定义 中不允许对结构体 本身的递归定义。 (指针例外) struct person{ char name[20]; int age; char sex; float height; struct person *per; }
对结构体变量,在初始化时,应将各 成员所赋初值依照结构体类型说明中成员 的顺序依次放在一对大括号中,不允许跳 过前面的成员给后面的成员赋值,但可以 只给前面若干个成员赋初值,后面未赋初 值的成员中,数值型和字符型的数据,系 统自动赋值零。
结构体变量成员的引用
1、可以将结构体变量的值赋给另一个具有 相同结构的结构体变量; 2、可以引用一个结构体变量中的一个成员 的值;引用的一般形式为: 结构体变量名. 成员名 其中,“.”是成员运算符; 3、如果成员本身也是一个结构体类型,则 要用若干个成员运算符,一级一级地找到最 低一层的成员;
C语言允许用typedef说明一种新类型 名,来代替已有类型名,形式为: typedef 类型名 标识符; 其中,类型名是在此语句前已有定 义的类型标识符,标识符是用做新 类型名的用户定义标识符。例如, typedef float REAL; typedef char *PCHAR; 该语句将用户命名标识符REAL说明 成了一个float型的类型名,此后可以 使用新类型名REAL定义float型的变 量。例如: REAL a,b; 等价于 float a,b; PCHAR p; 等价于 char *p; 也就是说typedef并未产生新的数据 类型,它的作用仅仅是给已存在的 类型名起一个“别名”,且原有类 型名依然有效。
定义结构体类型,只说明了该类 型的组成情况,编译系统并没有给它 分配内存空间。只有当定义属于结构 体类型的变量时,系统才会分配存储 空间给该变量。
声明结构体变量有以下三种方法。 ——以上面定义的stu为例来加以说明。 1. 先定义结构,再说明结构变量。如: struct Stu{ char name[20]; int num; char sex; int age; char address[30]; }; struct Stu boy1,boy2; 说明了两个变量boy1和boy2为stu结构类型。
4、不能将一个结构体变量作为一个整体进 行输入和输出,只能对结构体变量中的各个 成员分别进行输入和输出; 5、对结构体变量的成员可以像普通变量一 样进行各种运算; 6、可以引用结构体变量成员的地址,也可 以引用结构体变量的地址。
指向结构变量的指针 • 结构指针变量定义的一般形式为: struct 结构名 *结构指针变量名 例如,在前面的例题中定义了stu这个结构,如 要说明一个指向stu的指针变量pstu,可写为: struct stu *pstu; • 赋值是把结构变量的首地址赋予该指针变量,不 能把结构名赋予该指针变量。如果boy是被说明为 stu类型的结构变量,则: pstu=&boy 是正确的, 而:pstu=&stu 是错误的。
结构变量的初始化:和其他类型变量一样,对结
构变量可以在定义时进行初始化赋值。
【例】对结构变量初始化。 int main( ) { struct stu /*定义结构*/ { int num; char *name; char sex; float score; }boy2,boy1={102,"Zhang ping",'M',78.5}; boy2=boy1; return 0; }
2、结构体类 型定义中可以 包含另外的结 构体,即结构 体是可以嵌套 的。
struct data { int year; int month; int day; }; struct person { char name[20]; char sex; struct data birthday; float height; };
struct是结构体类型的标志。结构体名是由用 户定义的标识符,它规定了所定义的结构体类 型的名称。结构体类型的组成成分成为成员, 成员名的命名规则与变量名相同。
练习:定义一个结构体类型struct student,要 求包括学生姓名、学号、数学成绩、英语成绩、 计算机成绩、总分、邮政编码、通讯地址。
• 结构指针变量访问结构变量的 各个成员,其访问的一般形式 为:(*结构指针变量).成员名 或为:结构指针变量->成员名 例如:(*pstu).num 或者: pstu->num • 应该注意(*pstu)两侧的括号不 可少,因为成员符“.”的优先 级高于“*”。如去掉括号写 作*pstu.num则等效于 *(pstu.num),这样,意义就完 全不对了。
相关文档
最新文档