10结构体和共用体
1. 单独引用结构体变量的成员
today.year=2004; today.time.second=15; 2. 结构体变量作为一个整体引用 nextday=today;
C Programming Language
12
10.2.2 结构体类型变量的初始化
➢ 定义时初始化:将各元素初值放在“{ }”里赋 值给变量。
struct student {int num; char name[20]; char sex; int age; }; struct student stu[3] ={{10101,"Zhang",'M',18}, {10102,"Li",'M',19}, {10103,"Wang",'F',20}};
这部分主要讲解结构体与共用体的知识,一般会有2-3个 选择题和1-2个填空题。笔试题所占分值在8分左右 本章是编写复杂程序的重要知识,属于C语言程序设计 提高部分,要求考生重点掌握结构体、共用休和用户定义类 型的概念及应用。考生应理解掌握。 但结构体是必考知识点;上机考试中考核概率极高。
C Programming Language
C Programming Language
7
结构体变量的定义
用typedef为已存在的类型定义新名字
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
};
typedef struct student STUD;
struct student应作为一个
整体对待,“;”号不能少!
C Progr变量的定义
一、先定义结构体类型再定义变量名形式: struct 结构体名 结构体变量名表
例:在前面已定义结构体类型struct student 则 可定义:struct student stu1,stu2; stu1,stu2即为struct student类型的变量
专题之十
结构体、共用体和用户 定义类型
西南石油大学计算机科学学院 主讲:张耀文
主要内容
考纲分析
10.1 结构体类型的定义与变量说明 10.2 结构体类型变量的引用 10.3 结构体与数组 10.4 结构体与指针 10.5 结构体与函数 10.6 链表 10.7 共用体 10.8 用typedef定义类型
但是: int *q; q=&stu1.num合法
C Programming Language
20
【例14-6】用指向结构体变量的指针来访问学生 的各项数据。
#include "string.h" struct stu {int num; char *name; char sex; float score;
C Programming Language
6
三、直接定义结构类型的变量
一般形式为: struct { 成员表列
}变量名表列;
* 不出现结构体名
struct {int num; char name[20]; char sex; int age; float score; char addr[30]; }student1,student2;
10.2.1 引用 不能将一个结构体变量作为一个整体进行输入和 输出,只能对各个成员分别输入输出
➢ 例如: printf(”%d,%s,%c,%d,%f,%s\n”,student1);() 引用: student1.num=102;()
➢ 成员的引用方式为:结构体变量名. 成员名 注意:成员运算符. 在所有运算符中优先级最高
//续
22
P stu[0] P’stu[1] P”stu[2]
10101 “Zhang” ‘M’ 18 10102 “Li” ‘M’ 19 10103 “Wang” ‘F’ 20
main() /*续上页*/ { struct student *p;
printf("No. Name Sex Age\n"); for (p=stu; p<stu+3; p++)
16
结构体数组程序举例
【例10-5】计算一个班学生的三门课程的平均成 绩,并输出该班学生姓名及平均成绩。 程序见下:
#include <stdio.h> #define MAXSIZE 100 struct student { char name[16];/*学生姓名*/
int grade[3],average;/*三门成绩,平均分*/ };
};
同,同一结构体的同层成员
不可同名。
C Programming Language
3
例:定义结构体类型student
struct student {int num; char name[20]; char sex; int age; float score; char addr[30]; };
num name sex age score addr 101 WGJ M 28 88.5 CS
}boy={102,"Zhang ping",'M',78.5},*p; void main() { p=&boy;
printf("Number=%d\nName=%s\n",boy.num,); printf("Sex=%c\nScore=%4.1f\n\n",boy.sex,boy.score); printf("Number=%d\nName=%s\n",(*p).num,(*p).name); printf("Sex=%c\nScore=%4.1f\n\n",(*p).sex,(*p).score); printf("Number=%d\nName=%s\n",p->num,p->name); printf("Sex=%c\nScore=%4.1f\n\n",p->sex,p->score); }
如:
struct student { int num;
char name[20]; char sex; int age; float score; } stu[30];
C Programming Language
14
数组各元素在内存中连 续存放,如右图所示。
C Programming Language
stu1.dirthday.month=7; stu1.dirthday.day=31; [思考以下的引用] printf(“%d%d%d”,stu1.birthday);() stu1.birthday=12, 31, 1988 ; ()
C Programming Language
10
10.2 结构体类型变量引用与初始化
C Programming Language
5
二、在定义类型的同时定义变量
一般形式为:
struct 结构体名 {
成员表列
}变量名表列;
struct student {int num; char name[20]; char sex; int age; float score; char addr[30]; }student1,student2;
struct student
{int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu[3]={{101,”WGJ”,’M’,28,88.5,“CS”},
{102,”DYH”,’F’,26,88.0,”CS”},
C Programming Langu{a1ge03,”DYC”,’M’,24,78.5,”CZ”}};
形式:struct 结构体类型名 *结构体指针名 例:struct student stu1,*pst; pst=&stu1;(pst指向stu1)
结构体变量的访问形式: 结构体变量名.成员名:stu1.num=1001;
1. (*结构体指针名).成员名: (*pst).num=1001; 2. 结构体指针名->成员名: pst->num=1001; 注意:pst不能指向成员:pst=&stu1.num非法;
C Programming Language
21
10.4.2指向结构体数组的指针
[例10-7] 输出数组中各元素中各成员的值。
P stu[0] P’stu[1] P”stu[2]
C Programming Language
10101 “Zhang” ‘M’ 18 10102 “Li” ‘M’ 19 10103 “Wang” ‘F’ 20
scanf("%s",stu[i].name); printf("Enter the grades(3):"); for (j=0,s=0;j<3;j++) { scanf("%d",&stu[i].grade[j]);
s=s+stu[i].grade[j];} stu[i].average=s/3; } for(i=0;i<num;i++) printf("%-10s %4d\n",stu[i].name,stu[i].average); }
例: struct student { char name[20]; char sex; int age; float score; } stu1, stu2={“Wangwu”,’m’,20,88.5};