一、结构体/结构的引入
在学生的登录记录表中,姓名应该为字符型、学号可以为整形或字符型,年龄应该为整形,性别应该为字符型,成绩可以整形或实型。显然不能用一个数组来存放这一组数据,因为数组各元素的类型和元素都必须一致。
二、定义结构
为了定义结构,必须用struct语句。struct语句定义了一个包含多个成员的新的数据类型。
Struct 结构名
{
成员列表;
}变量名列表;
Struct stu
{
Int num;
Char name[20];
Char sex;
Float score;
}boy1,boy2;
三、定义结构变量的三种方式
1.先定义结构,再说明结构变量
struct stu
{
int num;
char name[20];
int age;
};
struct stu boy1,boy2;
例如:
#define STU struct stu
STU
{
int num;
char name[20];
int age;
};
STU boy1,boy2;
2.在定义结构类型的同时说明结构变量。
struct stu
{
int num;
char name[20];
int age;
}boy1,boy2;
3.直接说明结构变量
struct
{
int num;
char name[20];
int age;
}boy1,boy2;
四、结构体嵌套
首先定义一个date,由month(月),day(日),year(年)三个成员组成。在定义并说明变量boy1和boy2时,其中的成员birthday被说明为date结构类型。成员名可以与其他的变量同名,互不干扰。
Struct date
{
Int month;
Int day;
Int year;
};
Struct {
Int num;
Char name[20];
Char sex;
Struct date birthday;
Float score;
}boy1,boy2;
Num | Name | Sex | Birthday | score | ||
Month | Day | year |
五、结构变量
5.1 结构变量成员的表示方法
在程序中使用结构变量时,往往不把他作为一个整体来使用。
在程序中具有相同类型的结构变量可以相互的赋值,一般结构变量的使用,包括赋值、输入、输出、运算等都是通过结构变量的成员来实现的。
结构变量成员的一般形式:
结构变量名.成员名 例如:boy1.num 即第一个人的学号。
**如果成员变量本身就是一个结构,那么需要逐级找到最低级的成员才能使用。
例如:boy1.birthday.month 即第一个人出生的月份。
5.2 结构变量的赋值
结构变量的赋值就是给各个成员赋值,可以用输入语句或者赋值语句来完成。
/*
本程序中用赋值语句给num和name两个成员赋值,name是一个字符串常量。用sacanf函数动态的输入sex和score成员值,然后就把boy1的所有的成员的值整体赋值于boy2。最后分别输出boy2的各个成员值,
本示例表示了结构变量的赋值,输入和输出状态。
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc,char **argv)
{
struct stu
{
int num;
char name[20];
char sex[20];
float score;
}boy1,boy2;
boy1.num = 102;
strcpy(boy1.name,"shi wen jie");
printf("please input sex and score:\n");
scanf("%s %f",boy1.sex,&boy1.score);
boy2 = boy1;
printf("num\tname\t\tsex\tscore\n");
printf("num=%d\tname=%s\tsex=%s\tscore=%f\n",boy2.num,boy2.name,boy2.sex,boy2.score);
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/0b5db6b7cb66bcf1526ce51d8a90c814.png)
5.3 结构变量的初始化
和其他类型的变量一样,对结构变量可以在定义时进行初始化赋值。
#include<stdio.h>
int main(int argc,char **argv)
{
struct stu
{
int num;
char *name;
char sex[20]; //或者是char *sex;
float score;
}boy2,boy1 = {102,"shi wen jie","nan",65.7};
boy2 = boy1;
printf("num\tname\tsex\tscore\n");
printf("num=%d\tname=%s\tsex=%s\tscore=%f\n",boy2.num,boy2.name,boy2.sex,boy2.score);
}
![](https://i-blog.csdnimg.cn/blog_migrate/6d1acca55a3372d110a5724bfa25865a.png)