首页 理论教育C语言结构体的使用方法

C语言结构体的使用方法

【摘要】:对于嵌套的结构体类型变量,访问其成员时应采用逐级访问的方法,直到获得所需访问的成员为止。利用结构体变量作函数参数,实现计算某学生3门课程平均成绩的功能。

在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”。