概述
首先我们来捋一捋结构体变量那些事儿
结构体变量
学习一个新的语法 我们要弄明白的是:这个语法的作用,这种语法的初始化,这种语法的引用,这种语法的补充用法,这个语法与其他语法的结合,这个语法在实际题目中的应用。
1.自定义结构体的作用:
结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合
简单来说结构体就是定义了一个整体,里面可以包含各种数据类型。
具体如下:
struct 结构体名
{
类型 成员名1;
类型 成员名2;
…
类型 成员名n;
};
2.结构体的定义
结构体的定义有三种方式,列举如下:
第一种就是先声明后定义:
struct student
{
char name;
int grade;
char sex;
};
struct student s1;
第二种就是声明的时候同时定义 :
struct student
{
char name;
int number;
char sex;
}s1;
第三种就是声明的时候定义且 无结构体名 :
struct
{
char name;
int number;
char sex;
} s1;
注意:第二种第三种都是大括号之后直接加s1然后加上分号的。
这里一定要注意 结构体有一个名字叫结构体类型名,然后定义的时候还要给结构体定义一个名字这个叫做结构体变量名。
3.结构体的初始化
静态初始化
struct student
{
int number;
char name;
char sex;
};struct student s1={21,"周明",'m'};
动态初始化
此处涉及到结构体变量的引用:结构体变量名.成员
struct student
{
int number;
char name;
char sex;
}s1;
scanf ("%d %c %c",& s1.number,&s1.name,&s1.sex);
4.结构体的引用 :结构体变量名.成员
结构体的引用不能是整体
比如说:scanf(" %d%d",&s1.number1,&s1.number 2) 这样就是准确的。
但是 :scanf(" %d",&s1) 或者是 scanf("%d%d",&s1) 或者直接写 s1={32,43}没有定义 这些都是错误的
输出也是一样的:不可以使用整体。
5.结构体的补充用法
(1)赋值
以下是将S1的值赋给S2
struct
{
int num;
int lenf;
}s1={22,32},s2;
s2=s1;
(2)结构体的嵌入
比如:我们要表示一个学生的所有信息,其中的生日信息又包括了年月日,就有了以下的程序
#include <stdio.h>
struct kid
{
int year;
int month;
int days;
};
struct student
{
char name[10];
int age;
struct kid s1;
}s2={"狗狗",1,{1998,12,20}};
int main()
{
printf("%st%dt%d-%d-%d",s2.name,s2.age,s2.s1.year,s2.s1.month,s2.s1.days);
return 0;
}
其中我们有几个点需要注意:
【1】. 字符数组与字符串
((1))比如说给字符数组储存一个“China”,它是这样存放的 :
C | h | i | n | a |