弗原創IT教育中心 3结构数组 结构数组的每一个元素,都是结构类型数据,均包含结构 类型的所有成员。 案例5.3利用[案例5中定义的结构类型 struct std info 定义一个结构数组 student,用于存储和显示三个学生的基本情 况 include struct. h /*定义并初始化一个外部结构数组 student3]* struct std_info student3}={“0002张三;男”1980,9,20}, 00005李四”;男”,{1980,8,15} “000124王五”,“女”,{1980,3,10}
5.3 5.3 结构数组 结构数组的每一个元素,都是结构类型数据,均包含结构 结构数组的每一个元素,都是结构类型数据,均包含结构 类型的所有成员。 类型的所有成员。 [案例5.3] 利用[案例5.1]中定义的结构类型 中定义的结构类型struct std_info std_info, 定义一个结构数组 定义一个结构数组student student,用于存储和显示三个学生的基本情 用于存储和显示三个学生的基本情 况 #include"struct.h include"struct.h" /*定义并初始化一个外部结构数组 定义并初始化一个外部结构数组student[3] */ student[3] */ struct std_info student[3]={{ std_info student[3]={{“000102”,“张三”,“男”,{1980,9,20}}, ,{1980,9,20}}, {“000105”,“李四”,“男”,{1980,8,15}}, ,{1980,8,15}}, {“000112”,“王五”,“女”,{1980,3,10}} }; ,{1980,3,10}} };
弗原創IT教育中心 /*主函数 maina mainO int 1, /*打印表头:"口"表示1个空格字符* printf("lNo.口日口口Nane口口口囗 Sexl Birthday)n" /*输出三个学生的基本情况*/ for(1=0;1<3;i++ i printf(%o-7s"student(1]. no); printf(00-9 student[]. name) printf( % o-4s"student[]. sex); printf(%/od-0/d-0od \n", student[i] birthday year, student[ birthdaymonth, student(i] birthday day
/*主函数main()*/ main()*/ main() { int i; /*打印表头: " □ "表示 1个空格字符 * / printf("No. printf("No.□□□□Name□□□□□Sex □Birthday Birthday \ n"); /*输出三个学生的基本情况 输出三个学生的基本情况 * / for(i=0; i<3; i++) for(i=0; i<3; i++) { printf("% { printf("% -7s",student[i].no); 7s",student[i].no); printf("% printf("% -9s",student[i].name); 9s",student[i].name); printf("% printf("% -4s",student[i].sex); 4s",student[i].sex); printf("%d printf("%d -%d -%d \n",student[i].birthday.year n",student[i].birthday.year, student[i].birthday.month, student[i] student[i].birthday.month, student[i].birthday.day); .birthday.day); } }
弗原創IT教育中心 程序运行结果: ame Sex birthday 000102张三男1980-9.20 000105李四男1980-8-15 000112王五女1980-3-10 与结构变量的定义相似,结构数组的定义也分 直接定义和间接定义两种方法,只需说明为数组 卩可 与普通数组一样,结构数组也可在定义时进行 初始化。初始化的格式为: 结构数组]={初值表1},{初值表2},…,{初 值表n 例如,本案例中的结构数组 student3
程序运行结果: 程序运行结果: No. Name Sex Birthday No. Name Sex Birthday 000102 000102 张三 男 1980-9-20 000105 000105 李四 男 1980-8-15 000112 000112 王五 女 1980-3-10 与结构变量的定义相似,结 与结构变量的定义相似,结构数组的定义也分 构数组的定义也分 直接定义和间接定义两种方法,只需说明为数组 直接定义和间接定义两种方法,只需说明为数组 即可。 与普通数组一样,结构数组 与普通数组一样,结构数组也可在定义时进行 也可在定义时进行 初始化。初始化的格式为: 初始化。初始化的格式为: 结构数组[n]={{初值表1},{初值表2},...,{初 值表n}} 例如,本案例中的结构数组 例如,本案例中的结构数组student[3] student[3]
弗原創IT教育中心 54指向结构类型数据的指针 结构变量在内存中的起始地址称为结构变量的指针。 541指向结构变量的指针 案例5.4使用指向结构变量的指针来访问结构变量的各个 成员 # Include" struct. h” struct std info student={“0002张三,“男”1980,9,20} main i struct std_info *p_std=&student printf("No: %os\n",P-std->no); printf(Na ame: %os\n",P_std->name); rin printf( Birthday: %/0d-0/od-%d\n",p_std->birthday year, P-std->birthday. month, P_std->birthday day
5.4 指向结构类型数据的指针 指向结构类型数据的指针 结构变量在内存中的起始地址称为结构变量的指针。 结构变量在内存中的起始地址称为结构变量的指针。 5.4.1 指向结构变量的指针 指向结构变量的指针 [案例5.4] 使用指向结构变量的指针来访问结构变量的各个 使用指向结构变量的指针来访问结构变量的各个 成员。 #include include“struct.h struct.h” struct std_info student={ std_info student={“000102”,“张三”,“男”,{1980,9,20}}; ,{1980,9,20}}; main() { struct std_info *p_std=&student; std_info *p_std=&student; printf("No printf("No: %s\n", p_std n", p_std->no); printf("Name printf("Name: %s\n", p_std n", p_std->name); >name); printf("Sex printf("Sex: %s\n", p_std n", p_std->sex); printf("Birthday printf("Birthday: %d-%d-%d\n", p_std n", p_std->birthday.year, >birthday.year, p_std->birthday.month, p_std >birthday.month, p_std->birthday.day); >birthday.day); }
弗原創IT教育中心 通过指向结构变量的指针来访问结构变量的成员,与 直接使用结构变量的效果一样。一般地说,如果指针变 量 pointer已指向结构变量var,则以下三种形式等价: (1)va成员 (2) pointer->成员 (3)( pointer成员/*" pointer"外面的括号不能省!*/ 注意:在格式(1)中,分量运算符左侧的运算对 象,只能是结构变量,;而在格式(2)中,指向运算符 左侧的运算对象,只能是指向结构变量(或结构数组) 的指针变量,否则都出错。 思考题:如果要求从键盘上输入结构变量 student的各 成员数据,如何修改程序?
通过指向结构变量的指针来访问结构变量的成员,与 通过指向结构变量的指针来访问结构变量的成员,与 直接使用结构变量的效果一 直接使用结构变量的效果一样。一般地说,如果指针变 量pointer pointer已指向结构变量 已指向结构变量var,则以下三种形式等价: 则以下三种形式等价: ( 1 )var.成员 ( 2 )pointer pointer- >成员 ( 3 )(*pointer). (*pointer).成员 /* “*pointer *pointer”外面的括号不能省! * / 注意:在格式( 1)中,分量运算符左侧的运算对 )中,分量运算符左侧的运算对 象,只能是结构变量,;而在格式( 象,只能是结构变量,;而在格式( 2)中,指向运算符 )中,指向运算符 左侧的运算对象,只能是指 左侧的运算对象,只能是指向结构变量(或结构数组) 的指针变量,否则都出错。 的指针变量,否则都出错。 思考题:如果要求从键盘上输入结构变量 :如果要求从键盘上输入结构变量student student的各 成员数据,如何修改程序? 成员数据,如何修改程序?