当前位置:文档之家› 结构数组

结构数组


空间,当然,就可以取结构变量的首地址赋值给结构指针变量。
2)使用结构指针访问结构成员
使用结构指针变量可以有2种方式来访问结构变量成员。
语法一:通过间接寻址运算“*” 和成员访问运算“.”来访问:
(*结构指针变量) .成员名
注意括号,因为成员符“.”的优先级要高于间接寻址运算“*”。
语法二:直接使用“->”运算符来访问:
int main(){ //结构变量定义与初始化 struct student boy1={102, "陈某",'M', 78.5 }; //结构指针 struct student *pstu;
//结构指针赋值 //pstu = &student //非法,不能使用结构名 pstu = &boy1;
3)先定义结构,再定义数组变量
struct student {
int num; char *name; char sex; float score; }; struct student stu[30];
与其它类型的数组一样,结构数组也可以在定义时初始化赋值。同样,在对数组的全部
元素作初始化赋值时,可以不给出数组长度。
结构指针变量 -> 成员名
-> 运算符的优先级高,与直接使用“结构变量.成员名”等效,也是最常用的方式。
需要注意的是,结构指针变量虽可访问结构的成员,但不允许取一个成员的地址来赋值
给其他指针变量。
【例8-5】分别使用上述两种访问方式来访问结构变量的成员。
/* Name: 8-5.c Copyright: 2006-2010, School of Software Engineering, BJTU Author: Chen XuDong Date: 02-10-10 18:19 Description: 结构指针的使用
1)直接定义数组变量
struct {
int num; char *name; char sex; float score; } stu[30];
2)在定义结构的同时,定义数组变量
struct student {
int num; char *name; char sex; float score; } stu[30];
8.1.5 结构数组
数组的元素类型是结构类型,就构成结构数组。
结构数组中,每个元素是相同的结构类型变量。因此,在实际应用中,常用结构数组来
表示具有相同数据结构的一个群体,如一个班的学生档案。
结构数组的定义和结构变量的定义相似,可以有3种方式。但是最常用的结构数组定义
还是先定义结构,然后使用结构名定义数组变量。
return 0; }
8.1.6 结构指针
当指针变量指向一个结构变量时,就称为结构指针变量。 结构指针变量中的值是所指向的结构变量的首地址。通过结构指针可以访问该结构变 量,这与数组指针和函数指针的情况是相似的。 结构指针变量定义同样有3种形式,但是最常用的还是先定义结构,然后使用结构名定 义指针变量,其一般形式为:
*/
#include <stdio.h>
//结构定义 struct student {
int num;
char *name; char sex; float score; };
//定义结构数组,并且对数组初始化
struct student stu[]={
//可以不给出数组长度
{101,"李某",'M',45},
struct 结构名 *结构指针变量名;
与其他指针变量相同,在使用结构指针变量时也必须先赋值后使用。 1)结构指针变量赋值 结构指针变量赋值实际是把结构变量的首地址赋予该指针变量。在使用数组时,由于数 组名表示的是数组的首地址,因此可以将数组名赋值给相应的指针变量。但是,结构名只是 类型名,编译系统并不对它分配内存空间,因此,结构名并不代表地址,也就不可能取到一 个结构名的首地址,不能把结构名赋值给结构指针变量。 与结构名不同,结构变量会由编译器确定需要的存储空间,并且在程序运行时分配存储
//可以使用 指针变量 和 结构变量 来访问结构成员 //访问成员:结构变量 printf("学号:%d\n 姓名:%s\n",
boy1.num, ); printf("性别:%c\n 成绩:%.2f\n\n", boy1.sex, boy1.score);
//访问成员:结构指针变量访问方式一 printf("学号:%d\n 姓名:%s\n",
{102,"张某",'M',62.5},
{103,"何某",'F',92.5},
{104,"常某",'F',87},
{105,"陈某",'M',58}
};
//主函数 int main() {
int i; int count=0; float sum=0; float average;
//用于统计不及格人数的计数 //用于累加和 //用于保存平均值
结构变量.成员名 (*结构指针变量).成员名 结构指针变量->成员名 这三种用于表示结构成员的形式是完全等效的 */ #include <stdio.h>
//结构定义,为全局定义 struct student {
int num; char *name; char sex; float score; };
for (i=0; i<5; i++)
{
sum += stu[i].score; //累加求和
if (stu[i].score < 60)
count += 1;
//不及格人数统计
}
//计算平均成绩 average = sum/5;
//输出 平均成绩 不及格人数 printf("平均成绩:%f\n 不及格人数:%d\n", average, count);
【例8-4】使用结构数组表示学生成绩,使用了结构数组的初始化来代替了手工数据录
入,程序实现了计算学生平均成绩和统计不及格人数的功能。
/* Name: 8-4.c Copyright: 2006-2010, School of Software Engineering, BJTU Author: Chen XuDong Date: 02-10-10 17:38 Description: 结构数组的使用 计算学生的平均成绩和不及格的人数
相关主题