“struct结构体名”为结构体数据类型名字,使用结构体类型名才能在程序中定义结构体变量。③“数据类型名结构体成员i;”指定了结构体类型中的一个结构体成员,结构体成员必须像以前的变量定义一样进行说明,成员名的命名规则与变量名相同,要符合标识符的命名原则。④结构体类型定义语句是一条完整的C语句,所以结构体类型的声明要用“;”作为结束符。......
2023-11-20
在C程序中,定义了结构体类型后还需要定义该类型的变量才能使用,结构体变量是一个组合形式的变量,一个结构体变量中包含了若干个成员分量。
1.结构体变量的初始化
与普通变量一样,定义结构体类型变量的同时也可以进行初始化。按照所定义的结构体类型各成员的数据类型,依次写出各初始值,在编译时将这些值依次赋给该结构体变量的各成员。结构体变量初始化的一般形式为:
struct结构体名变量名={结构体变量成员值列表};
例如,对于前面已有结构体数据类型struct Student,则下面的C语句在定义结构体类型变量s1的同时对其进行了初始化操作:
struct Student s1={20161234,"LiMing",1999,12,30,'m',98,78,99,100,88};
对于含有结构体嵌套的变量进行初始化时,也可以把内层结构体中的所有成员数据用一对花括号括起来,上述初始化也可以写成:
struct Student s1={20161234,"LiMing",{1999,12,30},'m',98,78,99,100,88};
结构体变量在初始化时类似于一维数组的初始化。唯一的区别是数组中各元素类型相同,结构体变量中各成员类型可以不同,初始化时每个成员值必须与各成员所定义的数据类型一致,并不能对某些成员缺省赋值。
2.结构体变量的引用
结构体变量的操作方法与操作数组类似,通过对其中的每一个数据项的操作达到操作结构体变量的目的。对于结构体变量中每一个成员的引用要使用成员运算符(点运算符)以构成结构体成员分量,成员运算符“.”是优先级别最高的运算符,结合方向为从左到右。结构体成员分量的一般形式为:
结构体变量名.成员分量名
例如,s1.name、s1.sex等。
对于嵌套的结构体类型变量,访问其成员时应采用逐级访问的方法,直到获得所需访问的成员为止。只能对最后一级的成员进行赋值、输入、输出或其他运算。其形式为:
结构体变量名.一级成员分量名.二级成员分量名…
例如,s1.birthday.year、s1.birthday.month、s1.birthday.day等。
3.结构体变量的输入输出
C语言不允许把一个结构体变量作为一个整体进行输入或输出操作,只能对结构体变量中的各个成员分别进行输入和输出。对结构体变量成员输入输出操作时应该特别注意对应成员的数据类型,例如下面的语句序列:
scanf("%s,%d,%d",s1.name,&s1.num,&s1.score[0]);
printf("%s,%d,%d\n",s1.name,s1.num,s1.score[0]);
gets(s1.name);(www.chuimin.cn)
puts(s1.name);
对结构体变量的成员可以像普通变量一样进行各种运算,当两个结构体变量同类型时,可以将一个结构体变量作为一个整体赋值给另外一个结构体变量。例如,下面的C语句序列将结构体变量s1赋值给同类型结构体变量s2:
struct Student s1={20161234,"LiMing",1999,12,30,'m',98,78,99,100,88};
struct Student s2=s1; /*将结构体变量s1赋值给同类型结构体变量s2*/
【例10.4】 结构体变量的输入/输出示例。
程序运行时,通过赋值语句给stu1的学号部分赋值,通过格式化输入函数的调用为stu1的其他部分输入值;然后将stu1变量直接赋值给stu2,最后输入stu2变量的所有成员值。程序一次运行过程和执行结果为:
请输入姓名:zhang san //输入数据
请输入性别和成绩:f,99 //输入数据
学号:102
姓名:zhang san
性别:f
成绩:99.00
4.结构体变量作函数的参数
与基本数据类型的变量一样,结构体类型变量和结构体类型变量的成员都可以作为函数的参数在函数间进行传递,数据的传递仍然是“值传递方式”。使用结构体类型变量作为函数参数时,被调函数的形参和主调函数的实参都是结构体类型的变量,而且属于同一个结构体类型。使用结构体类型变量的成员作为函数参数时,其中被调函数中的形参是普通变量,而主调函数中的实参是结构体类型变量中的一个成员,并且形参和实参的数据类型应该对应一致。
【例10.5】 利用结构体变量作函数参数,实现计算某学生3门课程平均成绩的功能。
程序中定义了函数Average,函数具有一个结构体类型STUDENT形式参数。函数被调用时,为其形式参数stu在内存中开辟存储空间,将实参结构体变量stu的所有成员依次拷贝给形参stu。由于仍然是实现的数值参数传递,所以在被调函数中仍然不能修改主调函数中的实参值。程序的执行结果是:该学生的平均成绩为81.00。
5.结构体作函数的返回值类型
在C程序中定义结构体数据类型后,同一程序中也可以用该结构体数据类型作为函数的返回值类型。函数的返回值类型是结构体类型时,函数执行完成后返回的就是一个结构体数据,称这种函数为返回结构体类型的函数。其函数定义的一般形式为:
【例10.6】 已知某学生几门课程的成绩,利用返回结构体类型函数实现统计总成绩功能。
函数count通过形式参数结构体变量stu接收主调函数传递过来的结构体类型数据值,计算出其成员分量stu.sum的值,并将该值作为函数的执行结果返回给主调函数。程序执行的结果是“该学生的总成绩为:258”。
有关C语言程序设计基础(第3版)的文章
“struct结构体名”为结构体数据类型名字,使用结构体类型名才能在程序中定义结构体变量。③“数据类型名结构体成员i;”指定了结构体类型中的一个结构体成员,结构体成员必须像以前的变量定义一样进行说明,成员名的命名规则与变量名相同,要符合标识符的命名原则。④结构体类型定义语句是一条完整的C语句,所以结构体类型的声明要用“;”作为结束符。......
2023-11-20
用户自己定义的结构体类型,与系统定义的标准类型一样,是可以用来定义结构体类型的变量。这种方法定义的结构体类型在程序后面不可使用,因为缺少完整的结构体类型名。......
2023-10-21
一个指针变量用来指向一个结构体变量时,称之为结构体指针变量。结构体指针变量中的值是所指向的结构体变量的首地址。有了结构体指针变量,就能方便地访问结构体变量的各个成员。下面通过例子来说明结构体指针变量的具体说明和使用方法。图7.6程序运行结果说明:程序定义了一个结构stu,定义了stu 类型结构体变量boy1,并初始化赋值,还定义了一个指向stu 类型结构的指针变量pstu。......
2023-10-21
当一个指针指向一个结构体变量时,称为结构体指针变量。结构体指针变量中的值是所指向的结构变量的首地址,通过结构指针即可访问该结构变量。结构体指针变量定义的一般形式为:struct结构类型名 *结构指针变量名在定义了struct student结构类型后,如要定义一个指向该结构类型的指针变量pstu,可写为:struct student*pstu;当然也可在定义struct student结构类型的同时定义pstu。与前面讨论的各类指针变量相同,结构指针变量也必须要先赋值后使用。......
2023-11-18
项目2:输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。图3.15兔子问题输出结果根据以上的分析可以知道,循环次数可以为0,因此该程序是一个条件型循环,可以利用while语句编写程序。熟悉了循环结构在程序设计中的运用,循环结构语句包含了while语句、do…......
2023-11-18
指向结构体变量的指针变量叫结构体类型指针变量,其定义方式、使用方法与指向基本变量的方法相同。使用结构体指针变量时还需要特别注意,结构体变量的地址与结构体变量成员的地址是不同的。已知某学生3门课程的成绩存放在一个结构体变量中,请设计一个独立的函数计算该学生的平均成绩,要求函数使用结构体指针变量做函数的形式参数。......
2023-11-20
前面章节讨论了将数据写入文件和从文件中读取数据的方法。在上述两方面应用的文件数据处理中,文件操作的模式应该是“读写”文件。“读写”文件的打开模式有两大类:读为主的读写类模式和写为主的读写类模式。在对文件数据读写时,必须确认读写位置指针的性质是“读位置指针”还是“写位置指针”。下面通过两个示例展示文件“读写”模式的使用方法。......
2023-11-20
图7.8程序运行结果说明:程序中定义了函数ave,其形参为结构体指针变量ps。boy 被定义为外部结构体数组,在整个源程序中有效。......
2023-10-21
相关推荐