- 1、本文档共1690页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第(3)种方法与第(2)种方法的区别在于省去了结构体名,因此也就不存在这个结构体类型的名字。如果需要在程序的其他地方再定义这种结构体类型变量时,则因无结构体类型名而不能定义。而第(1)种和第(2)种方法在程序的任何地方都可以通过结构体类型名struct student去定义新的结构体变量。 上述三种方法对结构体变量stu1分配的存储空间分配示意如图7-2所示。 图7-2 结构体变量stu1内存分配示意 下面嵌套形式结构体类型所定义的变量stu1、stu2,其stu1存储空间分配示意如图7-3所示。 struct student { char name[20]; int age; char sex; struct { int year,mouth,day; }birthday; float average; }; 图7-3 嵌套形式下结构体变量stu1内存分配示意 2. 结构体变量的初始化 结构体变量初始化的一般形式为: 结构体类型 结构体变量名={初始化值表}; 初始化值表给出的初始值将依次赋给结构体变量中顺序出现的每一个成员,给出的初始化数据必须与这个数据的成员类型一致,且个数不得多于结构体变量中的成员个数;如果提供的初始值项数少于成员个数,则与数组类似,没有赋值的成员自动初始化为0值。 如果定义时没有给结构体变量提供初始值,则系统对结构体变量的处理与普通变量一样,外部和全局变量用0初始化;局部变量不初始化,故其各成员的值不确定。 结构体变量的初始化也有如下两种方式: (1) 定义结构体类型之后,在进行结构体变量定义时的初始化。例如: struct student { char name[20]; int age; char sex; float score; }; struct student stu1={Li min,21, ′M′,86} (2) 在定义结构体类型的同时定义结构体变量并初始化。例如: struct student { char name[20]; int age; char sex; float score; } stu1={Li min,21, ′M′,86}, stu2={Wang fang,20, ′F′,82}; 3. 结构体变量的引用 一般情况下,不能将一个结构体变量作为一个整体来引用,而只能引用其中的成员;包括赋值、运算、输入和输出等都是通过结构体变量的成员来实现的。结构体变量中成员引用的一般形式为: 结构体变量名.成员名 其中,“.”是结构体成员运算符,其优先级最高,结合性自左而右。通过成员运算符“.”就可以像引用简单变量一样引用结构体变量的每一个成员。 注意,对结构体变量中的成员,可以像同类型的普通变量那样进行各种运算和操作。对结构体变量成员的引用,不能直接使用成员名,而是采用“由整体到局部”的层次方式,即先指明是哪个结构体变量,然后再通过成员运算符“.”指定某个成员,并且必须逐层找到最低层的成员才能使用。例如: struct student s1,s2; /*假定结构体类型定义同前,在此仅定义结构体变量*/ scanf(%s,s1.name); /*输入姓名*/ scanf(%f,s1.score); /*输入成绩*/ printf(name=%s,score=%f\n,s1.name,s1.score); /*输出姓名和成绩*/ 我们知道,一般情况下不能整体引用一个结构体变量,而只能引用其中的成员;但下面两种情况下可以对结构体变量赋值: (1) 给结构体变量整体赋值。例如: struct student s1={Li min,21, ′M′,86},s2; s2=s1; (2) 取结构体变量地址。例如: struct student *p, s1={Li min,21, ′M′,86}; p=s1; 注意,结构体变量名是一个地址常量,其含义与数组名相同,但不能对结构体变量做整体运算和输入,输出。 例7.1 给结构体变量赋值并输出其值。 [解] 程序如下: #includestdio.h void main() { struct student { char name[20]; int age; char sex; float score; }stu1,stu2; printf(Input name,age,sex,score:\n); scanf(%s ,%d,%c,%f,stu1.name,stu1.age,stu1.sex,stu1.score); printf(Output:\n); printf
文档评论(0)