定义结构体类型变量(1)结构体类型与结构体变量是不同的概念,不要混淆。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配空间的,只对变量分配空间。(2)结构体类型中的成员名可以与程序中的变量名相同,但二者不代表同一对象。(3对结构体变量中的成员(即域”),可以单独使用,它的作用与地位相当于普通变量
定义结构体类型变量 (1) 结构体类型与结构体变量是不同的概念,不要混淆。只能对变量赋值、存取或运算,而不能对一个类 型赋值、存取或运算。在编译时,对类型是不分配空间的,只对变量分配空间。 (2) 结构体类型中的成员名可以与程序中的变量名相同,但二者不代表同一对象。 (3) 对结构体变量中的成员(即“域”),可以单独使用,它的作用与地位相当于普通变量
结构体变量的初始化和引用【例9.1】把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生的信息。口C\WINDOWS)system32/cmd.exeX#include<stdio.h>:10101int main()name:Li Linsex:l//声明结构体类型structStudentstructStudentress:123.BeijingRoadlong int num;//以下4行为结构体的成员char name[20]charsex,charaddr[20]:la=[10101"LiLin"M123BeijingRoad://定义结构体变量a并初始化printf("NO.%ld/nname:%sinsex:%clnaddress:%sin",a.num,a.name.a.sex.a.addr):return 0:
结构体变量的初始化和引用 【例9.1】把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出 这个学生的信息。 #include <stdio.h> int main() { struct Student //声明结构体类型struct Student { long int num; //以下4行为结构体的成员 char name[20]; char sex; char addr[20]; }a={10101,"Li Lin",'M',"123 Beijing Road"}; //定义结构体变量a并初始化 printf("NO.:%ld\nname:%s\nsex:%c\naddress:%s\n",a.num,a.name,a.sex,a.addr); return 0; }
结构体变量的初始化和引用(1)在定义结构体变量时可以对它的成员初始化。初始化列表是用花括号括起来的一些常量,这些常量依次赋给结构体变量中的各成员。注意对结构体变量初始化,不是对结构体类型初始化(2)可以引用结构体变量中成员的值,引用方式为结构体变量名.成员名student1.num=10010;/+已定义了student1为student类型的结构体变量,则student1.num表示studentl变量中的num成员,即student1的num(学号)成员*/”是成员运算符,它在所有的运算符中优先级最高,因此可以把student1.num作为一个整体来看待,相当于一个变量。printf("%sIn",student1)://企图用结构体变量名输出所有成员的值不能企图通过输出结构体变量名来达到输出结构体变量所有成员的值。只能对结构体变量中的各个成员分别进行输入和输出
结构体变量的初始化和引用 (1) 在定义结构体变量时可以对它的成员初始化。初始化列表是用花括号括起来的一些常量,这些常量 依次赋给结构体变量中的各成员。 (2) 可以引用结构体变量中成员的值,引用方式为 “. ”是成员运算符,它在所有的运算符中优先级最高,因此可以把student1.num作为一个整体来看 待,相当于一个变量。 不能企图通过输出结构体变量名来达到输出结构体变量所有成员的值。只能对结构体变量中的各个 成员分别进行输入和输出。 结构体变量名.成员名 student1.num=10010; /*已定义了student1为student类型的结构体变量,则student1.num表示student1 变量中的num成员,即student1的num(学号)成员*/ printf(″%s\n″,student1); //企图用结构体变量名输出所有成员的值 注意 对结构体变量初始化,不是对结构体类型初始化
结构体变量的初始化和引用(3)如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级的成员。只能对最低级的成员进行赋值或存取以及运算。student1.num=10010//结构体变量student1中的成员numstudent1.birthday.month=6://结构体变量student1中的成员birthday中的成员month(4)对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。1/赋值运算student2.score=student1.score;//加法运算sum=student1.score+student2.score://自加运算student1.age++;(5)同类的结构体变量可以互相赋值。student1=student2://假设student1和student2已定义为同类型的结构体变量(6)可以引用结构体变量成员的地址,也可以引用结构体变量的地址(结构体变量的地址主要用作函数参数,传递结构体变量的地址)。但不能用以下语整体读入结构体变量。//输入student1.num的值scanf("%d,%s,%c,%d,%f,%sn",&student1);scanf("%d",&student1.num)//输出结构体变量student1的起始地址printf("%o",&student1);
结构体变量的初始化和引用 (3) 如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级的成员。 只能对最低级的成员进行赋值或存取以及运算。 (4) 对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。 (5) 同类的结构体变量可以互相赋值。 (6) 可以引用结构体变量成员的地址,也可以引用结构体变量的地址(结构体变量的地址主要用作函数参 数,传递结构体变量的地址)。但不能用以下语句整体读入结构体变量。 student1.num=10010; //结构体变量student1中的成员num student1.birthday.month=6; //结构体变量student1中的成员birthday中的成员month student2.score=student1.score; //赋值运算 sum=student1.score+student2.score; //加法运算 student1.age++; //自加运算 student1=student2; //假设student1和student2已定义为同类型的结构体变量 scanf(″%d″,&student1.num); //输入student1.num的值 printf(″%o″,&student1); //输出结构体变量student1的起始地址 scanf(″%d,%s,%c,%d,%f,%s\n″,&student1);
结构体变量的初始化和引用【例9.2】输入两个学生的学号、姓名和成绩,输出成绩较高的学生的学号、姓名和成绩。#include<stdio.h>intmainostructStudent//声明结构体类型structStudentint num;1char name[20]:floatscore:Jstudent1,student2;//定义两个结构体变量student1,student2scanf("%d%s%f".&student1.num,student1.name&student1.score))://输入学生1的数据scanfc%d%s%f&student2.num,student2.name&student2.score)://输入学生1的数据printf(c"The higher score is:In"):if(student1.score>student2.score)printf("%d%s%6.2f\n",student1.num,student1.name,student1.score)elseif(student1.score<student2.score)printf("%d %s%6.2f/n",student2.num,student2.name,student2.score);elseprintf("%d %s %6.2f/n",student1.num,student1.name,student1.score);printf("%d %s%6.2f/n",student2.num,student2.name,student2.score):C\WINDOWS)system32)cmd.exe口X710110103Ling90return 0:The higher score is:90.00103Lne
结构体变量的初始化和引用 【例9.2】输入两个学生的学号、姓名和成绩,输出成绩较高的学生的学号、姓名和成绩。 #include <stdio.h> int main() { struct Student //声明结构体类型struct Student { int num; char name[20]; float score; }student1,student2; //定义两个结构体变量student1,student2 scanf("%d%s%f",&student1.num,student1.name,&student1.score); //输入学生1的数据 scanf("%d%s%f",&student2.num,student2.name,&student2.score); //输入学生1的数据 printf("The higher score is:\n"); if(student1.score>student2.score) printf("%d %s %6.2f\n",student1.num,student1.name,student1.score); else if(student1.score<student2.score) printf("%d %s %6.2f\n",student2.num,student2.name,student2.score); else { printf("%d %s %6.2f\n",student1.num,student1.name,student1.score); printf("%d %s %6.2f\n",student2.num,student2.name,student2.score); } return 0; }