C语言第六天:结构体变量与链表1
第六天
1.结构体
1.1结构体:用于保存多个不同类型数据的高级类型。
1.2一般格式:
struct 结构体类型名
{
数据类型 变量名1;
数据类型 变量名2;
................
数据类型 变量名n;
};
注:struct是关键字;结构体类型名是自己给这个结构体取的名字;类型名的定义只要遵循C语言标识符即可;每个变量声明以;结尾,成为结构体的成员变量。
1.3结构体的成员变量
结构体类型可以规定计算机去按照怎样的格式来保存数据。想保存什么就定义什么样的结构体。
例子:
struct computer
{
int monitors_sizes;
char cpu_type[20];
int memory_size;
};
1.4结构体变量
1.4.1变量声明的方式
结构体类型名 结构体变量名;
例子1:第一种方式
定义一个人的姓名,性别,年龄
struct my_home
{
char name[10];
char sex;
int years_old;
};
定义父母,自己的姓名,性别,年龄
struct my_home dad;
struct my_home mom;
struct my_home me;
例子2:第二种方式
struct my_home
{
char name[10];
char sex;
int years_old;
}dad,mom,me;
例子3:结构体的嵌套
定义一个人的姓名,性别,年龄
struct my_home
{
char name[10];
char sex;
int years_old;
};
定义父母,自己的姓名,性别,年龄
struct home_member
{
char name[10];
char sex;
int years_old;
struct my_home dad;
struct my_home mom;
struct my_home me;
};
1.4.2变量的初始化
标准写法:
结构体类型名 结构体变量名=
{
成员变量1的值;
成员变量2的值;
...............
成员变量n的值;
};
例子:
struct my_home
{
char name[10];
char sex;
int years_old;
};
struct my_home me=
{
"huangpengyu";
'M';
20;
};
1.4.3取结构体成员运算
a.表示形式:结构体变量 . 结构体成员变量;
注:形式中的 . 是取结构体成员运算符。
b.赋值运算
表示形式:结构体变量 . 结构体成员变量=值;
例子:
#include <stdio.h>
int main()
{
//定义结构体类型
struct my_home
{
char name[10];
char sex;
int years_old;
};
//变量初始化
struct my_home me=
{
"huangpengyu";
'M';
20;
};
//打印
printf("name:%s\n",me.name);
printf("sex:%c\n",me.sex);
printf("years_old:%s\n",me.years_old);
//赋值
me.name[0]='h';
me.name[1]='u';
me.name[2]='a';
me.name[3]='n';
me.name[4]='g';
me.name[5]='p';
me.name[6]='e';
me.name[7]='n';
me.name[8]='g';
me.name[9]='v';
me.sex='F';
me.years_old=19;
//打印
printf("name:%s\n",me.name);
printf("sex:%c\n",me.sex);
printf("years_old:%s\n",me.years_old);
return 0;
}
在编译器上运行一下,比较以下结果。
1.4.4结构体数组(只考虑一维结构体数组)
表示形式:结构体类型名 数组名[表达式];
例子:打印学校50名同学的信息
#include <stdio.h>
int main()
{
//结构体类型定义
struct student
{
char name[10];
char sex;
int years_old;
};
//定义结构体数组
struct student student[50];
//输入成绩
for(i=0;i<50;i++)
{
printf("name=");
scanf("%s",student[i].name);
printf("sex=");
scanf("%c",student[i].sex);
printf("years_old=");
scanf("%d",student[i].years_old);
printf("\n");
}
//输出成绩
for(i=0;i<50;i++)
{
printf("name:%s\n",me.name);
printf("sex:%c\n",me.sex);
printf("years_old:%s\n",me.years_old);
};
return 0;
}
1.4.5结构体指针
a.一重结构体指针
表示形式:结构体类型*结构体指针名
注:与前面不同,中间变成了*,它表示指针定义的表示符号。
struct my_home me;
struct *p_my_home;
p_my_home=&me;
b.使用结构体指针取结构体数据
例子:取出p_my_home所指的结构体数据中的结构体成员name的值
表示形式:(*p_my_home).name
简单形式:p_my_home->name
小题目:使用结构体指针打印我的信息
#include <stdio.h>
int main()
{
//定义结构体类型
struct my_home
{
char name[10];
char sex;
int years_old;
};
//变量初始化
struct my_home me=
{
"huangpengyu";
'M';
20;
};
//定义结构体指针变量
struct my_home *p_me;
p_me=&me;
//打印
printf("%s\n",(*p_me).name);
printf("%c\n",(*p_me).sex);
printf("%d\n",(*p_me).years_old);
return 0;
}