将出生日期单独定义为一个结■直接嵌入 构体类型后再嵌入。 Struct teacher 3 Struct date type i char name30; f int year; char sex: int month struct date type int day; Rint year int month; Struct teacher 2 int day i char name 30l; i birthday; char sex: char position [10; struct date type birthday float salary; char position [101; }/成员 birthday又是一个结 float salary, 构体类型的数据。* }(常用)
◼ 将出生日期单独定义为一个结 构体类型后再嵌入。 ◼ Struct date_type { int year; int month; int day; }; Struct teacher_2 { char name[30]; char sex; struct date_type birthday; char position[10]; float salary; } (常用) ◼ 直接嵌入。 Struct teacher_3 { char name[30]; char sex; struct date_type {int year; int month; int day; } birthday; char position[10]; float salary; } /*成员birthday又是一个结 构体类型的数据。 */
112结构体变量的定义及引用 经以上定义后,结构体类型 struct teacher与系统定 义的类型int、long、 float等一样,可以用它来定 义该类型的变量、数组、函数等 不同的是:结构体类型的作用范围是有限制的。在 函数体内定义的结构体类型的作用域为本函数内, 在函数体外定义的结构体类型的作用域为本程序 文件内,若要引用不在本文件内的结构体类型, 通常用# include命令将定义该类型的文件包含进 来 例11.1定义一个结构体变量,用于存放一个教师的 息,然后将其输出
11.2结构体变量的定义及引用 ◼ 经以上定义后,结构体类型struct teacher与系统定 义的类型int、long、float 等一样,可以用它来定 义该类型的变量、数组、函数等。 不同的是:结构体类型的作用范围是有限制的。在 函数体内定义的结构体类型的作用域为本函数内, 在函数体外定义的结构体类型的作用域为本程序 文件内,若要引用不在本文件内的结构体类型, 通常用#include命令将定义该类型的文件包含进 来。 例11.1定义一个结构体变量,用于存放一个教师的信 息,然后将其输出
include stdio. h main( struct teacher/该类型的作用范围在本函数内* i char name 301; char sex, int age, char position[ 10; float salary; struct teacher person定义结构体变量 person strcpy(person, name, wang li); person. sex=f’ 给各成员赋值* person age=30; strcpy(person position, middle); person. salary=1600
#include "stdio.h" main() { struct teacher /*该类型的作用范围在本函数内*/ { char name[30]; char sex; int age; char position[10]; float salary; }; struct teacher person; /*定义结构体变量person*/ strcpy(person.name,"wang li"); person.sex=‘f’; /*给各成员赋值*/ person.age=30; strcpy(person.position,"middle"); person.salary=1600;
printf( in name sex age position salary ) printf("in%o-10s %/3c %5d%10s %82f", person name, person. sex, person age, person position, person. salary); 分析: *本例中结构体类型在函数体内定义,其作用范围在本函数体内。 *先定义结构体类型,后定义结构体变量。 对结构体变量输入输出操作、或将基本类型的数据赋给结构体 变量时,需分别访问各个基本类型的成员,不能整体赋值或 入输出 如: printi(os%c%d%os%f2 person);错 person=li li,,, 24,primary, 1000)
printf("\n name sex age position salary"); printf("\n%-10s %3c %5d %10s %8.2f",person.name, person.sex,person.age,person.position,person.salary); } 分析: *本例中结构体类型在函数体内定义,其作用范围在本函数体内。 * 先定义结构体类型,后定义结构体变量。 * 对结构体变量输入输出操作、或将基本类型的数据赋给结构体 变量时,需分别访问各个基本类型的成员,不能整体赋值或 输入输出。 如:printf(“%s%c%d%s%f”,person); 错! person={“li li”,’f’, 24, “primary”,1000}; 错!
例11.2定义一个结构体类型,包含通讯录中的如下信息: 姓名、年龄、电话、通讯地址;并定义该类型的变量, 输入数据并输出 程序l112c #include stdio. hl struct address list /在函数体外定义结构体类型 &char name[10j: /该类型的作用域为本程序内 Int age; char tel[10l; char address[ 40; maino { address list s;/定义变量s,占空间62个字节 printf( input name gets(s name);
◼ 例11.2 定义一个结构体类型,包含通讯录中的如下信息: 姓名、年龄、电话、通讯地址;并定义该类型的变量, 输入数据并输出。 ◼ 程序l11_2.c #include "stdio.h" struct address_list /*在函数体外定义结构体类型*/ {char name[10]; /*该类型的作用域为本程序内*/ int age; char tel[10]; char address[40]; }; main() { struct address_list s; /*定义变量s,占空间62个字节*/ printf("\n input name:"); gets(s.name);