②在定义类型的同时定义变量 如: struct student fint num; char name[20]; char sex: int age; float score. char addr[30]; 3st1, st2; 则一般定义形式为: struct结构体名 分量表; }变量表;
在定义类型的同时定义变量 如:struct student {int num; char name[20]; char sex; int age; float score; char addr[30]; }st1,st2; struct 结构体名 { 分量表; } 变量表; 则一般定义形式为:
③直接定义结构类型变量 定义形式为: struct 分量表; }变量表; 在 struct后不出现结构体名,因此也不能再以此定 义相同的结构体变量。 3.关于结构体类型的几点说明 ①类型与变量是两个不同的概念。一般先定义结构体类 型,再定义变量为该类型。变量可以赋值、存取或运 算,而类型没有这些操作。在编译时,对变量分配空 间,对类型来说不存在分配空间。 ②对结构体中的分量可以单独使用
直接定义结构类型变量 定义形式为: struct { 分量表; }变量表; 在 struct 后不出现结构体名,因此也不能再以此定 义相同的结构体变量。 3.关于结构体类型的几点说明 类型与变量是两个不同的概念。一般先定义结构体类 型,再定义变量为该类型。变量可以赋值、存取或运 算,而类型没有这些操作。在编译时,对变量分配空 间,对类型来说不存在分配空间。 对结构体中的分量可以单独使用
③分量也可以是一个结构体变量。如 student中要增加 birthday,则可按如下方式进行定义: struct date fint month; int day;}先定义一个日期结构 int year } struct student struct date birthday; 该分量也是一个结构体 yst1, st2, 分量名可以与程序中的变量名相同,两者之间不会 产生混淆
分量也可以是一个结构体变量。如 student 中要增加 birthday,则可按如下方式进行定义: struct date {int month; int day; int year; }; struct student { struct date birthday; }st1, st2; 先定义一个日期结构 该分量也是一个结构体 分量名可以与程序中的变量名相同,两者之间不会 产生混淆
4.结构体类型变量的引用 引用结构体变量应遵守如下规则 1)结构体变量中分量的引用方式 结构体变量名·分量名[°二级分量名 其中:“·”为分量运算符,在所有的运算符中优先级最高 2)结构体变量的分量本身又属于结构体类型时只能对最 低级分量进行操作。如: st1.num: stlname: st1.birthday day; 写成St1 birthday并不会访问st1中的 birthday,只会 引起警告错误
4. 结构体类型变量的引用 引用结构体变量应遵守如下规则: 1) 结构体变量中分量的引用方式 结构体变量名分量名[ 二级分量名 ] 其中:“”为分量运算符, 在所有的运算符中优先级最高。 2) 结构体变量的分量本身又属于结构体类型时只能对最 低级分量进行操作。如: st1.num; st1.name; st1.birthday.day; 写成 st1.birthday 并不会访问st1中的birthday,只会 引起警告错误
3)不能将一个结构体变量直接进行输入输出,只能对结 构体变量的各分量进行输入输出。 如 scanf(“%d%s,%c,%d,%f%s”&st1) 错误 printf("%d, %s, %C, %d, %f, %s", st1) {错误 printf(%s,%d",st1. name, st1. birthday day); IEHA 4)分量和结构体变量的地址均可以被引用 如: scanf(“%d&st1num);输入st1mum的值 printf(%x”,&st1); 以十六进制输出st1的首地址
3) 不能将一个结构体变量直接进行输入输出,只能对结 构体变量的各分量进行输入输出。 如: scanf(“%d,%s,%c,%d,%f,%s”,&st1); 错误 printf(“%d,%s,%c,%d,%f,%s”,st1); 错误 printf(“%s,%d”,st1.name,st1.birthday.day); 正确 4) 分量和结构体变量的地址均可以被引用 如: scanf(“%d”,&st1.num); 输入st1.num的值 printf(“%x”,&st1); 以十六进制输出st1的首地址