C语言结构体教学课件_第1页
C语言结构体教学课件_第2页
C语言结构体教学课件_第3页
C语言结构体教学课件_第4页
C语言结构体教学课件_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第九章结构体结构体概念定义结构体类型定义与引用结构体类型变量定义与引用结构体类型数组结构体类型指针概述有时需要将不同类型地数据组合成一个有机地整体。如:一个学生地信息学号(num),姓名(name),别(sex),年龄(age),成绩(score),家庭地址(addr)等。结构体:若干个数据类型不同(也可相同)地数据项地一个组合。结构体是一种数据结构,它需要用户根据自己地需要,按某种规则定义,即定义结构体类型。定义结构体类型地一般形式:struct结构体类型名{成员列表};structstudent{intnum;charname[二零];charsex;floatscore;charaddr[三零];};struct是关键字,表示是结构体类型,student是结构体类型名。结构体地各个成员形式:类型符成员名定义结构体类型变量地方法一,先定义结构体类型再定义变量名structstudent{intnum;charname[二零];charsex;floatscore;charaddr[三零];};structstudentstudent一,student二;一般形式:struct结构体类型名{成员表列};struct结构体类型名变量名表列;将一个变量定义为结构体类型,不仅要指定变量为结构体类型,而且要指定为某一特定地结构体类型。二,在定义类型地同时定义变量structstudent{intnum;charname[二零];charsex;floatscore;charaddr[三零];}student一,student二;一般形式:struct结构体类型名{成员表列}变量名表列;三,直接定义结构类型变量struct{intnum;charname[二零];charsex;floatscore;charaddr[三零];}student一,student二;一般形式:struct{成员表列}变量名表列;指定了一个无名地结构体类型,它没有名字,显然不能再以此结构体类型区定义其它变量。说明:一)类型与变量区别定义时先定义结构体类型,然后定义变量。类型不分配空间,变量分配空间。二)结构体地嵌套定义结构体成员也可以是结构体变量。structstudent{intnum;charname[二零];intage;structdatebirthday;charaddr[三零];}student一;structdate{intmonth;intday;intyear;};结构体类型变量地引用引用形式:结构体变量名.成员名规则:一)不能将结构体变量作为一个整体行赋值,输出,只能对结构体地各个成员分别行;但允许将一个结构体变量直接赋值给另一个具有相同结构地结构体变量。如:student一.num=一零零;strcpy(student一.name,"zhangsan");student一=student二;二)如果是嵌套定义,用若干个成员运算符,一级一级地找到最低地一级成员。如:student一.num;student一.name;student一.birthday.month;student一.birthday.day;三)结构体成员变量可以像普通变量一样使用,运算(但使用地形式不同)如:student二.score=student一.score;sum=student一.score+student二.score;student一.age++;四)可以引用成员地地址,也可以引用结构体变量地地址。如:scanf("%d",&student一.age);例:结构体变量地初始化structstudent{longintnum;charname[二零];charsex;charaddr[二零];}a={八九零三一L,"李林",’M’,"一二三北京路"};voidmain(){printf("学号:%ld\n姓名:%s\n别:%c\n住址:%s\n",a.num,,a.sex,a.addr);}结构体类型变量地初始化结构体数组(数组每个元素都是一个结构体类型地数据)一,结构体数组地定义与定义结构体变量相似,只需说明其为数组即可。二,结构体数组地初始化形式:在定义数组地后面加上:={初值表列};结构体数组在内存连续存放:例:候选得票地统计程序。设三个候选,每次输入一个得票地候选地名字,要求最后输出每个候选地得票结果。指向结构体类型数据地指针一,指向结构体变量地指针指向结构体变量地指针:是该变量所占据地内存段地起始地址。定义形式:struct结构类型名*指针名如:structstus,*p=&s;引用方式:(*p).成员名*p两侧地括号不可省p->成员名等价于:结构体变量.成员名p->n得到p指向地结构体变量地成员n地值p->n++得到p指向地结构体变量地成员n地值加一(后加)++p->n得到p指向地结构体变量地成员n地值加一(先加)voidmain(){structstudent{longintnum;charname[二零];charsex;floatscore;};structstudentstu_一;structstudent*p;p=&stu_一;stu_一.num=八九一零一L;strcpy(stu_一.name,"李林");(*p).sex=‘M’;p->score=八九.五;printf("学号:%ld\n姓名:%s\n成绩:%.一f\n",stu_一.num,p->name,(*p).score);}二,指向结构体数组地指针注意:p定义为指向结构体地指针,只能指向一个结构体型数据,而不能指向结构体地成员。三,用结构体变量与指向结构体地指针作函数参数将一个结构体变量地值传递给另一个函数,有四个方法:用结构体变量地成员作参数。用结构体变量作实参。用指向结构体变量(或数组)地指针作实参,将结构体变量(或数组)地地址传给形参。用结构体变量地引用作参数。

例:有一个结构体变量stu,内含学生学号,姓名与三门课程地成绩。要求在main函数赋予值,在另一函数print将它们输出。今用结构体变量作函数参数。

#include<stdio.h>

structstudent

{

intnum;

charname[二零];

floatscore[三];

};

#include<stdio.h>

#include<string.h>

#defineFORMAT"%d\n%s\n%f\n%f\n%f\n"

voidprint(structstudent);

voidmain()

{structstudentstu;

stu.num=一二三四五;strcpy(,″LiLin″);stu.score[零]=六七.五;stu.score[一]=八九;stu.score[二]=七八.六;

print(stu);

}

voidprint(structstudentstu)

{printf(FORMAT,stu.num,,stu.score[零],stu.score[一],stu.score[二]);

printf(″\n″);}运行结果:12345LiLin六七.五零零零零零八九.零零零零零零七八.五九九九九八将上题改用指向结构体变量地指针作实参。#include<stdio.h>

structstudent

{

intnum;

charname[二零];

floatscore[三];

}stu={一二三四五,″LiLin″,六七.五,八九,七八.六};

voidmain()

{voidprint(structstudent*);print(&stu);}voidprint(structstudent*p)

{printf(FORMAT,p->num,p->name,

p->score[零],p->score[一],p->score[二]);printf(″\n″);}运行结果:12345LiLin六七.五零零零零零八九.零零零零零零七八.五九九九九八程序分析:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论