结构体变量:结构体类型变量的定义和引用



前面课程我们学习了些简单数据类型(整型、实型、型)定义和应用还学习了(维、 2维)定义和应用这些数据类型特点是:当定义某特定数据类型就限定该类型变量存储特性和取值范围对简单数据类型来说既可以定义单个变量
也可以定义全部元素都具有相同数据类型或者说是相同数据类型个集合
在日常生活中我们常会遇到些需要填写登记表如住宿表、成绩表、通讯地址等
在这些表中填写数据是不能用同种数据类型描述在住宿表中我们通常会登记上姓名、性别、身份证号码等项目;在通讯地址表中我们会写下姓名、邮编、邮箱地址、电话号码、E - m a i l等项目这些表中集合了各种数据无法用前面学过种数据类型完全描述因此C引入种能集中区别数据类型于数据类型—结构体类型结构体类型变量可以拥有区别数据类型成员是区别数据类型成员集合
在上面描述各种登记表中让我们仔细观察下住宿表、成绩表、通讯地址等
住宿表由下面项目构成:
\" width=567>
这些登记表用C提供结构体类型描述如下:
住宿表:
suct accommod
{
char name[20]; / *姓名* /
char sex; / *性别* /
char job[40]; / *职业* /
age; / *年龄* /
long number; / *身份证号码* /
} ;
成绩表:
suct score
{
char grade[20]; / * 班级* /
long number; / * 学号* /
char name[20]; / *姓名* /
float os; / *操作系统* /
float datasu; / * 数据结构* /
float compnet; / * 计算机网络* /
} ;
通讯地址表:
suct addr
{
char name[20];
char department[30];/ * 部门* /
char address[30]; / *住址* /
long box; / * 邮编* /
long phone; / * 电话号码* /
char email[30]; / * E m a i l * /
};
系列对区别登记表数据结构描述类型称为结构体类型由于区别问题有区别数据成员也就是说有区别描述结构体类型我们也可以理解为结构体类型根据所针对问题其成员是区别可以有任意多结构体类型描述
下面给出C对结构体类型定义形式:
suct 结构体名
{
成员项表列
};
有了结构体类型我们就可以定义结构体类型变量以对区别变量各成员进行引用
7.1.1 结构体类型变量定义
结构体类型变量定义和其它类型变量定义是但由于结构体类型需要针对问题事先自行定义所以结构体类型变量定义形式就增加了灵活性共计有 3种形式分别介绍如下:
1) 先定义结构体类型再定义结构体类型变量:
suct stu / *定义学生结构体类型* /
{
char name[20]; / * 学生姓名* /
char sex; / * 性别* /
long num; / *学号* /
float score[3]; / * 3科考试成绩* /
};
suct stu student1,student2;/ * 定义结构体类型变量* /
suct stu student3,student4;
用此结构体类型可以定义更多该结构体类型变量
2 ) 定义结构体类型同时定义结构体类型变量:
suct data
{
day;
month;
year;
} time1,time2;
也可以再定义如下变量:
suct data time3,time4;
用此结构体类型同样可以定义更多该结构体类型变量
3) 直接定义结构体类型变量:
suct
{
char name[20]; / *学生姓名* /
char sex; / *性别* /
long num; / *学号* /
float score[3]; / * 3科考试成绩* /
} person1,person2; / *定义该结构体类型变量* /
该定义思路方法由于无法记录该结构体类型所以除直接定义外不能再定义该结构体类型变量
7.1.2 结构体类型变量引用
\" width=202>
学习了怎样定义结构体类型和结构体类型变量怎样正确地引用该结构体类型变量成员呢?C 规定引用形式为:
<结构体类型变量名> . <成员名>
若我们定义结构体类型及变量如下:
suct data
{
day;
month;
year;
} time1,time2;
则变量time1和time2各成员引用形式为:time1.day、
time1.month、time1.year及time2.day、time2.month、
time2.year如图7-1所示
其结构体类型变量各成员和相应简单类型变量使
用思路方法完全相同
7.1.3结构体类型变量
由于结构体类型变量汇集了各类区别数据类型成员所以结构体类型变量化就略显复杂
结构体类型变量定义和化为:
suct stu / *定义学生结构体类型* /
{
char name[20]; / * 学生姓名* /
char sex; / * 性别* /
long num; / *学号* /
float score[3]; / * 3科考试成绩* /
};
suct stu student={\"liping\",\'f\',970541,98.5,97.4,95};
\" width=212>
我们也可以通过C提供输入输出完成对结构体类型变量成员输入输出由于结构体类型变量成员数据类型通常是不所以要将结构体类型变量成员以形式输入利用C类型转换将其转换为所需类型类型转换是:
atoi(char *s);转换s所指向串为整型返回值为整型
double atof(char*s);转换s所指向串为实型返回值为双精度实型
long atol(char*s);转换s所指向串为长整型返回值为长整型
使用上述要包含头文件\"slib.h\"
对上述结构体类型变量成员输入采用般形式:
char temp[20];
gets(student.name);/*输入姓名*/
student.sex=getchar;/*输入性别*/
gets(temp);/*输入学号*/
student.num=atol(temp);/*转换为长整型*/
for(i=0;i<3;i )/*输入 3科成绩*/
{
gets(temp);
student.score[i]=atoi(temp);
}
对该结构体类型变量成员输出也必须采用各成员独立输出而不能将结构体类型变量以整体形式输入输出
C允许针对具体问题定义各种各样结构体类型甚至是嵌套结构体类型


sucata
{
inay;
上述对结构体类型变量 3种定义形式均可在定义时结构体类型变量完成化后即各成员值分别为:student.name=\"liping\"、student.sex=\'f\'、student.num=970541、
student.score[0]=98.5、student.score[1]=97.4、student.score[2]=95其存储在内存情况如图7-2所示
mouth;
year;
} ;
suct stu
{
char name[20];
suct data birthday; 出/*生年月嵌套结构体类型*/
long num;
} person;
该结构体类型变量成员引用形式: person.name 、person.birthday.day、person. birthday.month、person. birthday. y e a r、person.num
Tags:  结构体定义 结构体变量名 结构体变量赋值 结构体变量

延伸阅读

最新评论

发表评论